GTK4: gtk_menu_popup() deprecated
authorColin Clark <colin.clark@cclark.uk>
Sun, 18 Sep 2022 13:51:29 +0000 (14:51 +0100)
committerColin Clark <colin.clark@cclark.uk>
Sun, 18 Sep 2022 13:51:29 +0000 (14:51 +0100)
GTK4 migration
- replace gtk_menu_popup() by gtk_menu_popup_at_widget() or
gtk_menu_popup_at_pointer()

22 files changed:
src/bar.c
src/bar_exif.c
src/bar_gps.c
src/bar_histogram.c
src/bar_keywords.c
src/cache_maint.c
src/collect-table.c
src/dupe.c
src/img-view.c
src/layout.c
src/layout_image.c
src/pan-view/pan-view.c
src/search.c
src/toolbar.c
src/ui_bookmark.c
src/ui_pathsel.c
src/ui_tabcomp.c
src/view_dir.c
src/view_dir_list.c
src/view_dir_tree.c
src/view_file/view_file_icon.c
src/view_file/view_file_list.c

index 6a4d9e9..c8f8d43 100644 (file)
--- a/src/bar.c
+++ b/src/bar.c
@@ -416,7 +416,7 @@ static void bar_menu_popup(GtkWidget *widget)
                menu_item_add_divider(menu);
                }
 
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, bar, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 static void bar_menu_add_popup(GtkWidget *widget)
@@ -437,7 +437,7 @@ static void bar_menu_add_popup(GtkWidget *widget)
                pane++;
                }
 
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, bar, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 
index a97316c..5823208 100644 (file)
@@ -660,7 +660,7 @@ static void bar_pane_exif_menu_popup(GtkWidget *widget, PaneExifData *ped)
        menu_item_add_stock(menu, _("Add entry"), GTK_STOCK_ADD, G_CALLBACK(bar_pane_exif_conf_dialog_cb), ped->widget);
        menu_item_add_check(menu, _("Show hidden entries"), ped->show_all, G_CALLBACK(bar_pane_exif_toggle_show_all_cb), ped);
 
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 static gboolean bar_pane_exif_menu_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
index 88c394a..aec1334 100644 (file)
@@ -872,7 +872,7 @@ static gboolean bar_pane_gps_map_keypress_cb(GtkWidget *UNUSED(widget), GdkEvent
        if (bevent->button == MOUSE_BUTTON_RIGHT)
                {
                menu = bar_pane_gps_menu(pgd);
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                return TRUE;
                }
        else if (bevent->button == MOUSE_BUTTON_MIDDLE)
index 71bdee9..49b3d12 100644 (file)
@@ -254,7 +254,7 @@ static gboolean bar_pane_histogram_press_cb(GtkWidget *UNUSED(widget), GdkEventB
                GtkWidget *menu;
 
                menu = bar_pane_histogram_menu(phd);
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                return TRUE;
        }
 
index 8882189..1870f9d 100644 (file)
@@ -1409,7 +1409,7 @@ static void bar_pane_keywords_menu_popup(GtkWidget *UNUSED(widget), PaneKeywords
        menu_item_add_check(submenu, _("Collapse unchecked"), pkd->collapse_unchecked, G_CALLBACK(bar_pane_keywords_collapse_unchecked_toggle_cb), pkd);
        menu_item_add_check(submenu, _("Hide unchecked"), pkd->hide_unchecked, G_CALLBACK(bar_pane_keywords_hide_unchecked_toggle_cb), pkd);
 
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 
index b073bc8..872d0f4 100644 (file)
@@ -100,7 +100,7 @@ static void cache_maintenance_status_icon_activate_cb(GtkStatusIcon *UNUSED(stat
        /* take ownership of menu */
        g_object_ref_sink(G_OBJECT(menu));
 
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, gtk_get_current_event_time());
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 void cache_maintenance(const gchar *path)
index f2bb9d1..67b385d 100644 (file)
@@ -1247,25 +1247,7 @@ static gint page_height(CollectTable *ct)
        return ret;
 }
 
-static void collection_table_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       CollectTable *ct = data;
-       GtkTreeModel *store;
-       GtkTreeIter iter;
-       gint column;
-       GtkTreePath *tpath;
-       gint cw, ch;
-
-       if (!collection_table_find_iter(ct, ct->click_info, &iter, &column)) return;
-       store = gtk_tree_view_get_model(GTK_TREE_VIEW(ct->listview));
-       tpath = gtk_tree_model_get_path(store, &iter);
-       tree_view_get_cell_clamped(GTK_TREE_VIEW(ct->listview), tpath, column, FALSE, x, y, &cw, &ch);
-       gtk_tree_path_free(tpath);
-       *y += ch;
-       popup_menu_position_clamp(menu, x, y, 0);
-}
-
-static gboolean collection_table_press_key_cb(GtkWidget *UNUSED(widget), GdkEventKey *event, gpointer data)
+static gboolean collection_table_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        CollectTable *ct = data;
        gint focus_row = 0;
@@ -1329,7 +1311,8 @@ static gboolean collection_table_press_key_cb(GtkWidget *UNUSED(widget), GdkEven
                        tip_unschedule(ct);
 
                        ct->popup = collection_table_popup_menu(ct, (info != NULL));
-                       gtk_menu_popup(GTK_MENU(ct->popup), NULL, NULL, collection_table_menu_pos_cb, ct, 0, GDK_CURRENT_TIME);
+                       gtk_menu_popup_at_widget(GTK_MENU(ct->popup), widget, GDK_GRAVITY_SOUTH, GDK_GRAVITY_CENTER, NULL);
+
                        break;
                default:
                        stop_signal = FALSE;
@@ -1713,7 +1696,7 @@ static gboolean collection_table_press_cb(GtkWidget *UNUSED(widget), GdkEventBut
                        break;
                case MOUSE_BUTTON_RIGHT:
                        ct->popup = collection_table_popup_menu(ct, (info != NULL));
-                       gtk_menu_popup(GTK_MENU(ct->popup), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
+                       gtk_menu_popup_at_pointer(GTK_MENU(ct->popup), NULL);
                        break;
                default:
                        break;
@@ -2322,7 +2305,7 @@ static void collection_table_dnd_get(GtkWidget *UNUSED(widget), GdkDragContext *
 static void collection_table_dnd_receive(GtkWidget *UNUSED(widget), GdkDragContext *context,
                                          gint x, gint y,
                                          GtkSelectionData *selection_data, guint info,
-                                         guint time, gpointer data)
+                                         guint UNUSED(time), gpointer data)
 {
        CollectTable *ct = data;
        GList *list = NULL;
@@ -2386,7 +2369,7 @@ static void collection_table_dnd_receive(GtkWidget *UNUSED(widget), GdkDragConte
                                        ct->drop_list = list;
                                        ct->drop_info = drop_info;
                                        menu = collection_table_drop_menu(ct);
-                                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, time);
+                                       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                                        return;
                                        }
                                work = work->next;
index 008fa12..4495fd3 100644 (file)
@@ -3627,7 +3627,7 @@ static gboolean dupe_listview_press_cb(GtkWidget *widget, GdkEventButton *bevent
                        {
                        menu = dupe_menu_popup_second(dw, di);
                        }
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                }
 
        if (!di) return FALSE;
@@ -4199,34 +4199,7 @@ static void dupe_window_custom_threshold_cb(GtkWidget *widget, gpointer data)
        dupe_window_recompare(dw);
 }
 
-static void dupe_popup_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       GtkWidget *view = data;
-       GtkTreePath *tpath;
-       gint cx, cy, cw, ch;
-       gint column;
-
-       gtk_tree_view_get_cursor(GTK_TREE_VIEW(view), &tpath, NULL);
-       if (!tpath) return;
-
-       if (gtk_tree_view_get_column(GTK_TREE_VIEW(view), DUPE_COLUMN_NAME - 1) != NULL)
-               {
-               column = DUPE_COLUMN_NAME - 1;
-               }
-       else
-               {
-               /* dw->second_listview */
-               column = 0;
-               }
-       tree_view_get_cell_clamped(GTK_TREE_VIEW(view), tpath, column, TRUE, &cx, &cy, &cw, &ch);
-       gtk_tree_path_free(tpath);
-       cy += ch;
-       popup_menu_position_clamp(menu, &cx, &cy, 0);
-       *x = cx;
-       *y = cy;
-}
-
-static gboolean dupe_window_keypress_cb(GtkWidget *UNUSED(widget), GdkEventKey *event, gpointer data)
+static gboolean dupe_window_keypress_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        DupeWindow *dw = data;
        gboolean stop_signal = FALSE;
@@ -4386,16 +4359,14 @@ static gboolean dupe_window_keypress_cb(GtkWidget *UNUSED(widget), GdkEventKey *
                                        GtkWidget *menu;
 
                                        menu = dupe_menu_popup_main(dw, di);
-                                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                                                      dupe_popup_menu_pos_cb, listview, 0, GDK_CURRENT_TIME);
+                                       gtk_menu_popup_at_widget(GTK_MENU(menu), widget, GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER, NULL);
                                        }
                                else
                                        {
                                        GtkWidget *menu;
 
                                        menu = dupe_menu_popup_second(dw, di);
-                                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                                                      dupe_popup_menu_pos_cb, listview, 0, GDK_CURRENT_TIME);
+                                       gtk_menu_popup_at_widget(GTK_MENU(menu), widget, GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER, NULL);
                                        }
                                break;
                        default:
@@ -5016,7 +4987,7 @@ static void dupe_dnd_data_set(GtkWidget *widget, GdkDragContext *UNUSED(context)
 static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
                              gint UNUSED(x), gint UNUSED(y),
                              GtkSelectionData *selection_data, guint info,
-                             guint time, gpointer data)
+                             guint UNUSED(time), gpointer data)
 {
        DupeWindow *dw = data;
        GtkWidget *source;
@@ -5050,7 +5021,7 @@ static void dupe_dnd_data_get(GtkWidget *widget, GdkDragContext *context,
                                        {
                                        GtkWidget *menu;
                                        menu = dupe_confirm_dir_list(dw, list);
-                                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, time);
+                                       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                                        return;
                                        }
                                work = work->next;
index dc564fc..6ef063b 100644 (file)
@@ -386,17 +386,7 @@ static void view_step_to_end(ViewWindow *vw, gboolean last)
  *-----------------------------------------------------------------------------
  */
 
-static void view_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       ViewWindow *vw = data;
-       ImageWindow *imd;
-
-       imd = view_window_active_image(vw);
-       gdk_window_get_origin(gtk_widget_get_window(imd->pr), x, y);
-       popup_menu_position_clamp(menu, x, y, 0);
-}
-
-static gboolean view_window_key_press_cb(GtkWidget *UNUSED(widget), GdkEventKey *event, gpointer data)
+static gboolean view_window_key_press_cb(GtkWidget * (widget), GdkEventKey *event, gpointer data)
 {
        ViewWindow *vw = data;
        ImageWindow *imd;
@@ -626,8 +616,7 @@ static gboolean view_window_key_press_cb(GtkWidget *UNUSED(widget), GdkEventKey
                        case GDK_KEY_Menu:
                        case GDK_KEY_F10:
                                menu = view_popup_menu(vw);
-                               gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                                              view_window_menu_pos_cb, vw, 0, GDK_CURRENT_TIME);
+                               gtk_menu_popup_at_widget(GTK_MENU(menu), widget, GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER, NULL);
                                break;
                        default:
                                stop_signal = FALSE;
@@ -685,7 +674,7 @@ static void button_cb(ImageWindow *imd, GdkEventButton *event, gpointer data)
                        break;
                case MOUSE_BUTTON_RIGHT:
                        menu = view_popup_menu(vw);
-                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
+                       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                        break;
                default:
                        break;
@@ -1611,7 +1600,7 @@ static GtkWidget *view_confirm_dir_list(ViewWindow *vw, GList *list)
 static void view_window_get_dnd_data(GtkWidget *UNUSED(widget), GdkDragContext *context,
                                     gint UNUSED(x), gint UNUSED(y),
                                     GtkSelectionData *selection_data, guint info,
-                                    guint time, gpointer data)
+                                    guint UNUSED(time), gpointer data)
 {
        ViewWindow *vw = data;
        ImageWindow *imd;
@@ -1640,7 +1629,7 @@ static void view_window_get_dnd_data(GtkWidget *UNUSED(widget), GdkDragContext *
                                        {
                                        GtkWidget *menu;
                                        menu = view_confirm_dir_list(vw, list);
-                                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, time);
+                                       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                                        return;
                                        }
                                work = work->next;
index 1662644..7df17b9 100644 (file)
@@ -440,8 +440,6 @@ static void layout_sort_button_press_cb(GtkWidget *UNUSED(widget), gpointer data
 {
        LayoutWindow *lw = data;
        GtkWidget *menu;
-       GdkEvent *event;
-       guint32 etime;
 
        menu = submenu_add_sort(NULL, G_CALLBACK(layout_sort_menu_cb), lw, FALSE, FALSE, TRUE, lw->sort_method);
 
@@ -462,18 +460,7 @@ static void layout_sort_button_press_cb(GtkWidget *UNUSED(widget), gpointer data
        g_signal_connect(G_OBJECT(menu), "selection_done",
                         G_CALLBACK(layout_sort_menu_hide_cb), NULL);
 
-       event = gtk_get_current_event();
-       if (event)
-               {
-               etime = gdk_event_get_time(event);
-               gdk_event_free(event);
-               }
-       else
-               {
-               etime = 0;
-               }
-
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, etime);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 static GtkWidget *layout_sort_button(LayoutWindow *lw, GtkWidget *box)
@@ -533,8 +520,6 @@ static void layout_zoom_button_press_cb(GtkWidget *UNUSED(widget), gpointer data
 {
        LayoutWindow *lw = data;
        GtkWidget *menu;
-       GdkEvent *event;
-       guint32 etime;
 
        menu = submenu_add_zoom(NULL, G_CALLBACK(layout_zoom_menu_cb),
                        lw, FALSE, FALSE, TRUE, options->image.zoom_mode);
@@ -570,18 +555,7 @@ static void layout_zoom_button_press_cb(GtkWidget *UNUSED(widget), gpointer data
        g_signal_connect(G_OBJECT(menu), "selection_done",
                         G_CALLBACK(layout_zoom_menu_hide_cb), NULL);
 
-       event = gtk_get_current_event();
-       if (event)
-               {
-               etime = gdk_event_get_time(event);
-               gdk_event_free(event);
-               }
-       else
-               {
-               etime = 0;
-               }
-
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 0, etime);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 static GtkWidget *layout_zoom_button(LayoutWindow *lw, GtkWidget *box, gint size, gboolean UNUSED(expand))
index a5ec76e..48a8331 100644 (file)
@@ -868,20 +868,12 @@ static GtkWidget *layout_image_pop_menu(LayoutWindow *lw)
        return menu;
 }
 
-static void layout_image_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       LayoutWindow *lw = data;
-
-       gdk_window_get_origin(gtk_widget_get_window(lw->image->pr), x, y);
-       popup_menu_position_clamp(menu, x, y, 0);
-}
-
 void layout_image_menu_popup(LayoutWindow *lw)
 {
        GtkWidget *menu;
 
        menu = layout_image_pop_menu(lw);
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, layout_image_menu_pos_cb, lw, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_widget(GTK_MENU(menu), lw->image->widget, GDK_GRAVITY_EAST, GDK_GRAVITY_CENTER, NULL);
 }
 
 /*
@@ -1908,7 +1900,7 @@ static void layout_image_button_cb(ImageWindow *imd, GdkEventButton *event, gpoi
                                {
                                g_object_set_data(G_OBJECT(menu), "click_parent", imd->widget);
                                }
-                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
+                       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                        break;
                default:
                        break;
@@ -2042,7 +2034,7 @@ static void layout_image_button_inactive_cb(ImageWindow *imd, GdkEventButton *ev
                                {
                                g_object_set_data(G_OBJECT(menu), "click_parent", imd->widget);
                                }
-                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
+                       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                        break;
                default:
                        break;
index 74ee866..2d6609b 100644 (file)
@@ -1178,15 +1178,7 @@ FileData *pan_menu_click_fd(PanWindow *pw)
        return NULL;
 }
 
-static void pan_window_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       PanWindow *pw = data;
-
-       gdk_window_get_origin(gtk_widget_get_window(pw->imd->pr), x, y);
-       popup_menu_position_clamp(menu, x, y, 0);
-}
-
-static gboolean pan_window_key_press_cb(GtkWidget *UNUSED(widget), GdkEventKey *event, gpointer data)
+static gboolean pan_window_key_press_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        PanWindow *pw = data;
        PixbufRenderer *pr;
@@ -1369,8 +1361,8 @@ static gboolean pan_window_key_press_cb(GtkWidget *UNUSED(widget), GdkEventKey *
                                case GDK_KEY_Menu:
                                case GDK_KEY_F10:
                                        menu = pan_popup_menu(pw);
-                                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                                                      pan_window_menu_pos_cb, pw, 0, GDK_CURRENT_TIME);
+                                       gtk_menu_popup_at_widget(GTK_MENU(menu), widget, GDK_GRAVITY_SOUTH, GDK_GRAVITY_CENTER, NULL);
+
                                        break;
                                case '/':
                                        pan_search_toggle_visible(pw, TRUE);
@@ -1595,7 +1587,7 @@ static void button_cb(PixbufRenderer *pr, GdkEventButton *event, gpointer data)
                case MOUSE_BUTTON_RIGHT:
                        pan_info_update(pw, pi);
                        menu = pan_popup_menu(pw);
-                       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, 3, event->time);
+                       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                        break;
                default:
                        break;
index 59f243e..75c42b7 100644 (file)
@@ -1198,24 +1198,6 @@ static GtkWidget *search_result_menu(SearchData *sd, gboolean on_row, gboolean e
        return menu;
 }
 
-static void search_result_menu_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       SearchData *sd = data;
-       GtkTreePath *tpath;
-       gint cx, cy, cw, ch;
-
-       gtk_tree_view_get_cursor(GTK_TREE_VIEW(sd->result_view), &tpath, NULL);
-       if (!tpath) return;
-
-       tree_view_get_cell_clamped(GTK_TREE_VIEW(sd->result_view), tpath,
-                                  SEARCH_COLUMN_NAME - 1, TRUE, &cx, &cy, &cw, &ch);
-       gtk_tree_path_free(tpath);
-       cy += ch;
-       popup_menu_position_clamp(menu, &cx, &cy, 0);
-       *x = cx;
-       *y = cy;
-}
-
 /*
  *-------------------------------------------------------------------
  * result list input
@@ -1247,7 +1229,7 @@ static gboolean search_result_press_cb(GtkWidget *widget, GdkEventButton *bevent
                GtkWidget *menu;
 
                menu = search_result_menu(sd, (mfd != NULL), (search_result_count(sd, NULL) == 0));
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                }
 
        if (!mfd) return FALSE;
@@ -1460,8 +1442,8 @@ static gboolean search_result_keypress_cb(GtkWidget *widget, GdkEventKey *event,
                                        sd->click_fd = NULL;
 
                                menu = search_result_menu(sd, (mfd != NULL), (search_result_count(sd, NULL) > 0));
-                               gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                                              search_result_menu_pos_cb, sd, 0, GDK_CURRENT_TIME);
+
+                               gtk_menu_popup_at_widget(GTK_MENU(menu), widget, GDK_GRAVITY_EAST, GDK_GRAVITY_CENTER, NULL);
                                }
                                break;
                        default:
index f98ce1f..acb87b3 100644 (file)
@@ -213,9 +213,6 @@ static void toolbar_item_delete_cb(GtkWidget *UNUSED(widget), gpointer data)
 static void toolbar_menu_popup(GtkWidget *widget)
 {
        GtkWidget *menu;
-       GtkWidget *vbox;
-
-       vbox = gtk_widget_get_parent(widget);
 
        menu = popup_menu_short_lived();
 
@@ -230,7 +227,7 @@ static void toolbar_menu_popup(GtkWidget *widget)
                menu_item_add_divider(menu);
                }
 
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, vbox, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 static gboolean toolbar_press_cb(GtkWidget *UNUSED(button), GdkEventButton *event, gpointer data)
@@ -378,7 +375,7 @@ static void get_desktop_data(const gchar *name, gchar **label, gchar **stock_id)
        g_list_free(editors_list);
 }
 
-static void toolbar_menu_add_popup(GtkWidget *widget, gpointer data)
+static void toolbar_menu_add_popup(GtkWidget *UNUSED(widget), gpointer data)
 {
        GtkWidget *menu;
        GList *editors_list;
@@ -421,7 +418,7 @@ static void toolbar_menu_add_popup(GtkWidget *widget, gpointer data)
                }
        g_list_free(editors_list);
 
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, widget, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
 }
 
 static gboolean toolbar_menu_add_cb(GtkWidget *widget, gpointer data)
index 9ceff57..166246d 100644 (file)
@@ -387,18 +387,8 @@ static void bookmark_menu_remove_cb(GtkWidget *UNUSED(widget), gpointer data)
        bookmark_populate_all(bm->key);
 }
 
-static void bookmark_menu_position_cb(GtkMenu *UNUSED(menu), gint *x, gint *y, gint *UNUSED(pushed_in), gpointer data)
-{
-       GtkWidget *button = data;
-       GtkAllocation allocation;
-
-       gtk_widget_get_allocation(button, &allocation);
-       gdk_window_get_origin(gtk_widget_get_window(button), x, y);
-       *y += allocation.y + allocation.height;
-}
-
 static void bookmark_menu_popup(BookMarkData *bm, GtkWidget *button,
-                               gint button_n, guint32 time, gboolean local)
+                               gint UNUSED(button_n), guint32 UNUSED(time), gboolean local)
 {
        GtkWidget *menu;
        BookButtonData *b;
@@ -420,12 +410,11 @@ static void bookmark_menu_popup(BookMarkData *bm, GtkWidget *button,
 
        if (local)
                {
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                              bookmark_menu_position_cb, button, button_n, time);
+               gtk_menu_popup_at_widget(GTK_MENU(menu), button, GDK_GRAVITY_NORTH_EAST, GDK_GRAVITY_CENTER, NULL);
                }
        else
                {
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button_n, time);
+               gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
                }
 }
 
index ab05944..1a4f0ce 100644 (file)
@@ -594,22 +594,8 @@ static void dest_popup_file_bookmark_cb(GtkWidget *UNUSED(widget), gpointer data
        dest_view_bookmark(dd, GTK_TREE_VIEW(dd->f_view));
 }
 
-static void dest_popup_position_cb(GtkMenu *menu, gint *x, gint *y,
-                                  gboolean *UNUSED(push_in), gpointer data)
-{
-       Dest_Data *dd = data;
-       GtkTreeView *view;
-       gint cw, ch;
-
-       view = g_object_get_data(G_OBJECT(menu), "active_view");
-
-       tree_view_get_cell_clamped(view, dd->right_click_path, 0, TRUE, x, y, &cw, &ch);
-       *y += ch;
-       popup_menu_position_clamp(menu, x, y, 0);
-}
-
 static gboolean dest_popup_menu(Dest_Data *dd, GtkTreeView *view,
-                               guint button, guint32 time, gboolean local)
+                               guint UNUSED(button), guint32 UNUSED(time), gboolean local)
 {
        GtkWidget *menu;
 
@@ -650,12 +636,12 @@ static gboolean dest_popup_menu(Dest_Data *dd, GtkTreeView *view,
        if (local)
                {
                g_object_set_data(G_OBJECT(menu), "active_view", view);
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                              dest_popup_position_cb, dd, button, time);
+               gtk_menu_popup_at_widget(GTK_MENU(menu), GTK_WIDGET(view), GDK_GRAVITY_CENTER, GDK_GRAVITY_CENTER, NULL);
                }
        else
                {
-               gtk_menu_popup(GTK_MENU(menu), NULL, NULL, NULL, NULL, button, time);
+               gtk_menu_popup_at_pointer(GTK_MENU(menu), NULL);
+
                }
 
        return TRUE;
index b0e2c48..4efaa4e 100644 (file)
@@ -298,62 +298,10 @@ static void tab_completion_popup_cb(GtkWidget *widget, gpointer data)
        tab_completion_emit_tab_signal(td);
 }
 
-static void tab_completion_popup_pos_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       TabCompData *td = data;
-       gint height;
-       PangoLayout *layout;
-       PangoRectangle strong_pos, weak_pos;
-       gint length;
-       gint xoffset, yoffset;
-       GtkRequisition req;
-       GdkScreen *screen;
-       gint monitor_num;
-       GdkRectangle monitor;
-       GtkRequisition requisition;
-       GtkAllocation allocation;
-
-       gdk_window_get_origin(gtk_widget_get_window(GTK_WIDGET(td->entry)), x, y);
-
-       screen = gtk_widget_get_screen(GTK_WIDGET(menu));
-       monitor_num = gdk_screen_get_monitor_at_window(screen, gtk_widget_get_window(GTK_WIDGET(td->entry)));
-       gdk_screen_get_monitor_geometry(screen, monitor_num, &monitor);
-
-       gtk_widget_size_request(GTK_WIDGET(menu), &req);
-
-       length = strlen(gtk_entry_get_text(GTK_ENTRY(td->entry)));
-       gtk_entry_get_layout_offsets(GTK_ENTRY(td->entry), &xoffset, &yoffset);
-
-       layout = gtk_entry_get_layout(GTK_ENTRY(td->entry));
-       pango_layout_get_cursor_pos(layout, length, &strong_pos, &weak_pos);
-
-       *x += strong_pos.x / PANGO_SCALE + xoffset;
-
-       gtk_widget_get_requisition(td->entry, &requisition);
-       gtk_widget_get_allocation(td->entry, &allocation);
-
-       height = MIN(requisition.height, allocation.height);
-
-       if (req.height > monitor.y + monitor.height - *y - height &&
-           *y - monitor.y >  monitor.y + monitor.height - *y)
-               {
-               height = MIN(*y - monitor.y, req.height);
-               gtk_widget_set_size_request(GTK_WIDGET(menu), -1, height);
-               *y -= height;
-               }
-       else
-               {
-               *y += height;
-               }
-}
-
 static void tab_completion_popup_list(TabCompData *td, GList *list)
 {
        GtkWidget *menu;
        GList *work;
-       GdkEvent *event;
-       guint32 etime;
-       gint ebutton;
        gint count = 0;
 
        if (!list) return;
@@ -385,30 +333,7 @@ static void tab_completion_popup_list(TabCompData *td, GList *list)
        g_signal_connect(G_OBJECT(menu), "key_press_event",
                         G_CALLBACK(tab_completion_popup_key_press), td);
 
-       /* peek at the current event to get the time, etc. */
-       event = gtk_get_current_event();
-
-       if (event && event->type == GDK_BUTTON_RELEASE)
-               {
-               ebutton = event->button.button;
-               }
-       else
-               {
-               ebutton = 0;
-               }
-
-       if (event)
-               {
-               etime = gdk_event_get_time(event);
-               gdk_event_free(event);
-               }
-       else
-               {
-               etime = 0;
-               }
-
-       gtk_menu_popup(GTK_MENU(menu), NULL, NULL,
-                      tab_completion_popup_pos_cb, td, ebutton, etime);
+       gtk_menu_popup_at_widget(GTK_MENU(menu), td->entry, GDK_GRAVITY_NORTH_EAST, GDK_GRAVITY_NORTH, NULL);
 }
 
 #ifndef CASE_SORT
index 1041d66..072b994 100644 (file)
@@ -846,7 +846,7 @@ static void vd_dnd_end(GtkWidget *UNUSED(widget), GdkDragContext *context, gpoin
 static void vd_dnd_drop_receive(GtkWidget *widget,
                                GdkDragContext *UNUSED(context), gint x, gint y,
                                GtkSelectionData *selection_data, guint info,
-                               guint time, gpointer data)
+                               guint UNUSED(time), gpointer data)
 {
        ViewDir *vd = data;
        GtkTreePath *tpath;
@@ -924,7 +924,7 @@ static void vd_dnd_drop_receive(GtkWidget *widget,
                if (done == FALSE)
                        {
                        vd->popup = vd_drop_menu(vd, active);
-                       gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL, 0, time);
+                       gtk_menu_popup_at_pointer(GTK_MENU(vd->popup), NULL);
                        }
 
                vd->drop_fd = fd;
@@ -1209,8 +1209,7 @@ gboolean vd_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer data)
                        }
 
                vd->popup = vd_pop_menu(vd, vd->click_fd);
-               gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL,
-                              bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(vd->popup), NULL);
 
                return TRUE;
                }
index 78f85a5..ab163b3 100644 (file)
@@ -395,7 +395,7 @@ gboolean vdlist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
 
        vd->popup = vd_pop_menu(vd, vd->click_fd);
 
-       gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, vd_menu_position_cb, vd, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_pointer(GTK_MENU(vd->popup), NULL);
 
        return TRUE;
 }
@@ -427,8 +427,7 @@ gboolean vdlist_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
        if (bevent->button == MOUSE_BUTTON_RIGHT)
                {
                vd->popup = vd_pop_menu(vd, vd->click_fd);
-               gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL,
-                              bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(vd->popup), NULL);
                return TRUE;
                }
 
index 6492b26..19c45e6 100644 (file)
@@ -821,7 +821,7 @@ gboolean vdtree_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                        vd_color_set(vd, vd->click_fd, TRUE);
 
                        vd->popup = vd_pop_menu(vd, vd->click_fd);
-                       gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, vd_menu_position_cb, vd, 0, GDK_CURRENT_TIME);
+                       gtk_menu_popup_at_pointer(GTK_MENU(vd->popup), NULL);
 
                        return TRUE;
                        break;
@@ -928,8 +928,7 @@ gboolean vdtree_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
        if (bevent->button == MOUSE_BUTTON_RIGHT)
                {
                vd->popup = vd_pop_menu(vd, vd->click_fd);
-               gtk_menu_popup(GTK_MENU(vd->popup), NULL, NULL, NULL, NULL,
-                              bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(vd->popup), NULL);
                }
 
        return (bevent->button != MOUSE_BUTTON_LEFT);
index fa00156..d49f760 100644 (file)
@@ -1189,25 +1189,7 @@ static gint page_height(ViewFile *vf)
  *-------------------------------------------------------------------
  */
 
-static void vfi_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       ViewFile *vf = data;
-       GtkTreeModel *store;
-       GtkTreeIter iter;
-       gint column;
-       GtkTreePath *tpath;
-       gint cw, ch;
-
-       if (!vficon_find_iter(vf, VFICON(vf)->click_fd, &iter, &column)) return;
-       store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
-       tpath = gtk_tree_model_get_path(store, &iter);
-       tree_view_get_cell_clamped(GTK_TREE_VIEW(vf->listview), tpath, column, FALSE, x, y, &cw, &ch);
-       gtk_tree_path_free(tpath);
-       *y += ch;
-       popup_menu_position_clamp(menu, x, y, 0);
-}
-
-gboolean vficon_press_key_cb(GtkWidget *UNUSED(widget), GdkEventKey *event, gpointer data)
+gboolean vficon_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        ViewFile *vf = data;
        gint focus_row = 0;
@@ -1280,7 +1262,7 @@ gboolean vficon_press_key_cb(GtkWidget *UNUSED(widget), GdkEventKey *event, gpoi
                        tip_unschedule(vf);
 
                        vf->popup = vf_pop_menu(vf);
-                       gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, vfi_menu_position_cb, vf, 0, GDK_CURRENT_TIME);
+                       gtk_menu_popup_at_widget(GTK_MENU(vf->popup), widget, GDK_GRAVITY_EAST, GDK_GRAVITY_CENTER, NULL);
                        break;
                default:
                        stop_signal = FALSE;
@@ -1386,7 +1368,7 @@ gboolean vficon_press_cb(GtkWidget *UNUSED(widget), GdkEventButton *bevent, gpoi
                        break;
                case MOUSE_BUTTON_RIGHT:
                        vf->popup = vf_pop_menu(vf);
-                       gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, NULL, NULL, bevent->button, bevent->time);
+                       gtk_menu_popup_at_pointer(GTK_MENU(vf->popup), NULL);
                        break;
                default:
                        break;
index e2b1687..3415b12 100644 (file)
@@ -530,23 +530,6 @@ static gboolean vflist_row_rename_cb(TreeEditData *UNUSED(td), const gchar *old_
        return FALSE;
 }
 
-static void vflist_menu_position_cb(GtkMenu *menu, gint *x, gint *y, gboolean *UNUSED(push_in), gpointer data)
-{
-       ViewFile *vf = data;
-       GtkTreeModel *store;
-       GtkTreeIter iter;
-       GtkTreePath *tpath;
-       gint cw, ch;
-
-       if (vflist_find_row(vf, VFLIST(vf)->click_fd, &iter) < 0) return;
-       store = gtk_tree_view_get_model(GTK_TREE_VIEW(vf->listview));
-       tpath = gtk_tree_model_get_path(store, &iter);
-       tree_view_get_cell_clamped(GTK_TREE_VIEW(vf->listview), tpath, FILE_COLUMN_NAME - 1, TRUE, x, y, &cw, &ch);
-       gtk_tree_path_free(tpath);
-       *y += ch;
-       popup_menu_position_clamp(menu, x, y, 0);
-}
-
 gboolean vflist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer data)
 {
        ViewFile *vf = data;
@@ -571,7 +554,7 @@ gboolean vflist_press_key_cb(GtkWidget *widget, GdkEventKey *event, gpointer dat
                }
 
        vf->popup = vf_pop_menu(vf);
-       gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, vflist_menu_position_cb, vf, 0, GDK_CURRENT_TIME);
+       gtk_menu_popup_at_widget(GTK_MENU(vf->popup), widget, GDK_GRAVITY_EAST, GDK_GRAVITY_CENTER, NULL);
 
        return TRUE;
 }
@@ -611,8 +594,7 @@ gboolean vflist_press_cb(GtkWidget *widget, GdkEventButton *bevent, gpointer dat
        if (bevent->button == MOUSE_BUTTON_RIGHT)
                {
                vf->popup = vf_pop_menu(vf);
-               gtk_menu_popup(GTK_MENU(vf->popup), NULL, NULL, NULL, NULL,
-                               bevent->button, bevent->time);
+               gtk_menu_popup_at_pointer(GTK_MENU(vf->popup), NULL);
                return TRUE;
                }