From 85de03686c39993d11adab0ef87aaed2dd97b186 Mon Sep 17 00:00:00 2001 From: Jan Dolinar Date: Thu, 18 Nov 2021 16:18:00 +0100 Subject: [PATCH] fix context menus on wayland (#3009) --- src/callbacks.c | 4 ++++ src/editor.c | 5 ++++- src/msgwindow.c | 12 ++++++++++++ src/notebook.c | 4 ++++ src/plugins.c | 4 ++++ src/prefs.c | 4 ++++ src/sidebar.c | 12 ++++++++++++ src/symbols.c | 4 ++++ src/vte.c | 4 ++++ 9 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/callbacks.c b/src/callbacks.c index 09faa4acf7..724b543be6 100644 --- a/src/callbacks.c +++ b/src/callbacks.c @@ -634,7 +634,11 @@ gboolean toolbar_popup_menu(GtkWidget *widget, GdkEventButton *event, gpointer u { if (event->button == 3) { +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(ui_widgets.toolbar_menu), NULL); +#else gtk_menu_popup(GTK_MENU(ui_widgets.toolbar_menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif return TRUE; } return FALSE; diff --git a/src/editor.c b/src/editor.c index 0d0796a117..bbc0a6ab70 100644 --- a/src/editor.c +++ b/src/editor.c @@ -346,9 +346,12 @@ static gboolean on_editor_button_press_event(GtkWidget *widget, GdkEventButton * g_signal_emit_by_name(geany_object, "update-editor-menu", current_word, editor_info.click_pos, doc); +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(main_widgets.editor_menu), NULL); +#else gtk_menu_popup(GTK_MENU(main_widgets.editor_menu), NULL, NULL, NULL, NULL, event->button, event->time); - +#endif return TRUE; } return FALSE; diff --git a/src/msgwindow.c b/src/msgwindow.c index 350ec3880e..2df1eb1fac 100644 --- a/src/msgwindow.c +++ b/src/msgwindow.c @@ -1236,20 +1236,32 @@ static gboolean on_msgwin_button_press_event(GtkWidget *widget, GdkEventButton * { case MSG_STATUS: { +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(msgwindow.popup_status_menu), NULL); +#else gtk_menu_popup(GTK_MENU(msgwindow.popup_status_menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif break; } case MSG_MESSAGE: { +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(msgwindow.popup_msg_menu), NULL); +#else gtk_menu_popup(GTK_MENU(msgwindow.popup_msg_menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif break; } case MSG_COMPILER: { +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(msgwindow.popup_compiler_menu), NULL); +#else gtk_menu_popup(GTK_MENU(msgwindow.popup_compiler_menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif break; } } diff --git a/src/notebook.c b/src/notebook.c index 9b81eddcd7..ceb1dc99ba 100644 --- a/src/notebook.c +++ b/src/notebook.c @@ -508,7 +508,11 @@ static void show_tab_bar_popup_menu(GdkEventButton *event, GeanyDocument *doc) gtk_container_add(GTK_CONTAINER(menu), menu_item); g_signal_connect(menu_item, "activate", G_CALLBACK(on_close_all1_activate), NULL); +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL); +#else gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif } diff --git a/src/plugins.c b/src/plugins.c index ec48145699..12db990e5f 100644 --- a/src/plugins.c +++ b/src/plugins.c @@ -1642,8 +1642,12 @@ static gboolean pm_treeview_button_press_cb(GtkWidget *widget, GdkEventButton *e { if (event->button == 3) { +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(pm_widgets.popup_menu), NULL); +#else gtk_menu_popup(GTK_MENU(pm_widgets.popup_menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif } return FALSE; } diff --git a/src/prefs.c b/src/prefs.c index 64d4b456e5..6cb3e13874 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -246,7 +246,11 @@ static void kb_show_popup_menu(KbData *kbdata, GtkWidget *widget, GdkEventButton event_time = gtk_get_current_event_time(); } +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL); +#else gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, event_time); +#endif } diff --git a/src/sidebar.c b/src/sidebar.c index d27f73a9d1..95bf4c228b 100644 --- a/src/sidebar.c +++ b/src/sidebar.c @@ -145,8 +145,12 @@ on_default_tag_tree_button_press_event(GtkWidget *widget, GdkEventButton *event, { if (event->button == 3) { +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(tv.popup_taglist), NULL); +#else gtk_menu_popup(GTK_MENU(tv.popup_taglist), NULL, NULL, NULL, NULL, event->button, event->time); +#endif return TRUE; } return FALSE; @@ -1488,13 +1492,21 @@ static gboolean sidebar_button_press_cb(GtkWidget *widget, GdkEventButton *event /* update menu item sensitivity */ documents_menu_update(selection); +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(openfiles_popup_menu), NULL); +#else gtk_menu_popup(GTK_MENU(openfiles_popup_menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif } else { +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(tv.popup_taglist), NULL); +#else gtk_menu_popup(GTK_MENU(tv.popup_taglist), NULL, NULL, NULL, NULL, event->button, event->time); +#endif } handled = TRUE; } diff --git a/src/symbols.c b/src/symbols.c index f6e61adb7e..baa1cebd3a 100644 --- a/src/symbols.c +++ b/src/symbols.c @@ -1536,8 +1536,12 @@ static void show_goto_popup(GeanyDocument *doc, GPtrArray *tags, gboolean have_b g_object_set_data_full(G_OBJECT(menu), "geany-button-event", button_event, button_event ? (GDestroyNotify) gdk_event_free : NULL); +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL); +#else gtk_menu_popup(GTK_MENU(menu), NULL, NULL, goto_popup_position_func, doc->editor->sci, button_event ? button_event->button : 0, gtk_get_current_event_time ()); +#endif } diff --git a/src/vte.c b/src/vte.c index c4b236b98b..5cff0bde44 100644 --- a/src/vte.c +++ b/src/vte.c @@ -526,7 +526,11 @@ static gboolean vte_button_pressed(GtkWidget *widget, GdkEventButton *event, gpo if (event->button == 3) { gtk_widget_grab_focus(vte_config.vte); +#if GTK_CHECK_VERSION(3,22,0) + gtk_menu_popup_at_pointer(GTK_MENU(vte_config.menu), NULL); +#else gtk_menu_popup(GTK_MENU(vte_config.menu), NULL, NULL, NULL, NULL, event->button, event->time); +#endif return TRUE; } else if (event->button == 2)