diff options
author | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2017-04-20 15:47:21 +0300 |
---|---|---|
committer | Alberts Muktupāvels <alberts.muktupavels@gmail.com> | 2017-04-20 15:47:21 +0300 |
commit | 0bd6923d4ad02590eed12d6c1a6a0d26b6b02a64 (patch) | |
tree | 21aba28b51d41360d2af823cc8cb764ce9fba460 | |
parent | 6b81655ed087951f2857b2da252a88557f5e2277 (diff) | |
download | metacity-0bd6923d4ad02590eed12d6c1a6a0d26b6b02a64.tar.gz |
menu: fix build with gtk+ 3.20.x
-rw-r--r-- | src/core/display.c | 5 | ||||
-rw-r--r-- | src/core/keybindings.c | 10 | ||||
-rw-r--r-- | src/ui/frames.c | 14 | ||||
-rw-r--r-- | src/ui/menu.c | 55 |
4 files changed, 84 insertions, 0 deletions
diff --git a/src/core/display.c b/src/core/display.c index 1e56019b..1191433a 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -2024,8 +2024,13 @@ event_callback (XEvent *event, if (meta_prefs_get_raise_on_click ()) meta_window_raise (window); +#if GTK_CHECK_VERSION (3, 22, 0) rect.x = event->xbutton.x; rect.y = event->xbutton.y; +#else + rect.x = event->xbutton.x_root; + rect.y = event->xbutton.y_root; +#endif rect.width = 0; rect.height = 0; diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 847c972e..c7ea071e 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -2812,10 +2812,20 @@ handle_activate_window_menu (MetaDisplay *display, GdkRectangle rect; GdkEvent *gdk_event; +#if GTK_CHECK_VERSION (3, 22, 0) rect.x = display->focus_window->rect.x; rect.y = display->focus_window->rect.y; rect.width = display->focus_window->rect.width; rect.height = 0; +#else + meta_window_get_position (display->focus_window, &rect.x, &rect.y); + + if (meta_ui_get_direction() == META_UI_DIRECTION_RTL) + rect.x += display->focus_window->rect.width; + + rect.width = 0; + rect.height = 0; +#endif gdk_event = key_press_event_new (event); meta_window_show_menu (display->focus_window, &rect, gdk_event); diff --git a/src/ui/frames.c b/src/ui/frames.c index 07f05fb3..9db27bf4 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -1655,8 +1655,13 @@ meta_frame_titlebar_event (MetaFrames *frames, { GdkRectangle rect; +#if GTK_CHECK_VERSION (3, 22, 0) rect.x = event->x; rect.y = event->y; +#else + rect.x = event->x_root; + rect.y = event->y_root; +#endif rect.width = 0; rect.height = 0; @@ -1826,6 +1831,15 @@ meta_frames_button_press_event (GtkWidget *widget, return FALSE; } +#if !GTK_CHECK_VERSION (3, 22, 0) + rect.x += event->x_root - event->x; + rect.y += rect.height + event->y_root - event->y; + + /* Align to the right end of the menu rectangle if RTL */ + if (meta_ui_get_direction() == META_UI_DIRECTION_RTL) + rect.x += rect.width; +#endif + frame->ignore_leave_notify = TRUE; meta_core_show_window_menu (frames->xdisplay, frame->xwindow, diff --git a/src/ui/menu.c b/src/ui/menu.c index cda60435..ee9c84d8 100644 --- a/src/ui/menu.c +++ b/src/ui/menu.c @@ -450,11 +450,39 @@ meta_window_menu_new (MetaFrames *frames, return menu; } +#if !GTK_CHECK_VERSION (3, 22, 0) +static void +popup_position_func (GtkMenu *menu, + gint *x, + gint *y, + gboolean *push_in, + gpointer user_data) +{ + GtkRequisition req; + GdkPoint *pos; + + pos = user_data; + + gtk_widget_get_preferred_size (GTK_WIDGET (menu), &req, NULL); + + *x = pos->x; + *y = pos->y; + + if (meta_ui_get_direction() == META_UI_DIRECTION_RTL) + *x = MAX (0, *x - req.width); + + /* Ensure onscreen */ + *x = CLAMP (*x, 0, MAX (0, gdk_screen_width () - req.width)); + *y = CLAMP (*y, 0, MAX (0, gdk_screen_height () - req.height)); +} +#endif + void meta_window_menu_popup (MetaWindowMenu *menu, const GdkRectangle *rect, const GdkEvent *event) { +#if GTK_CHECK_VERSION (3, 22, 0) GdkEventAny *any; any = (GdkEventAny *) event; @@ -464,6 +492,33 @@ meta_window_menu_popup (MetaWindowMenu *menu, GDK_GRAVITY_SOUTH_WEST, GDK_GRAVITY_NORTH_WEST, event); +#else + GdkPoint *pt; + gint button; + guint32 timestamp; + + pt = g_new (GdkPoint, 1); + + g_object_set_data_full (G_OBJECT (menu->menu), "destroy-point", pt, g_free); + + pt->x = rect->x; + pt->y = rect->y; + + if (event->type == GDK_KEY_PRESS) + { + button = 0; + timestamp = ((GdkEventKey *) event)->time; + } + else + { + button = ((GdkEventButton *) event)->button; + timestamp = ((GdkEventButton *) event)->time; + } + + gtk_menu_popup (GTK_MENU (menu->menu), NULL, NULL, + popup_position_func, pt, + button, timestamp); +#endif if (!gtk_widget_get_visible (menu->menu)) { |