diff options
-rw-r--r-- | src/core/core.c | 12 | ||||
-rw-r--r-- | src/core/display.c | 45 | ||||
-rw-r--r-- | src/core/keybindings.c | 46 | ||||
-rw-r--r-- | src/core/window-private.h | 2 | ||||
-rw-r--r-- | src/core/window.c | 4 | ||||
-rw-r--r-- | src/include/core.h | 8 | ||||
-rw-r--r-- | src/include/ui.h | 2 | ||||
-rw-r--r-- | src/ui/frames.c | 12 | ||||
-rw-r--r-- | src/ui/menu.c | 22 | ||||
-rw-r--r-- | src/ui/menu.h | 2 | ||||
-rw-r--r-- | src/ui/ui.c | 4 |
11 files changed, 49 insertions, 110 deletions
diff --git a/src/core/core.c b/src/core/core.c index 563d184b..9b5cf841 100644 --- a/src/core/core.c +++ b/src/core/core.c @@ -472,18 +472,18 @@ meta_core_get_active_workspace (Screen *xscreen) } void -meta_core_show_window_menu (Display *xdisplay, - Window frame_xwindow, - const GdkRectangle *rect, - const GdkEventButton *event) +meta_core_show_window_menu (Display *xdisplay, + Window frame_xwindow, + const GdkRectangle *rect, + guint32 timestamp) { MetaWindow *window = get_window (xdisplay, frame_xwindow); if (meta_prefs_get_raise_on_click ()) meta_window_raise (window); - meta_window_focus (window, event->time); + meta_window_focus (window, timestamp); - meta_window_show_menu (window, rect, (GdkEvent *) event); + meta_window_show_menu (window, rect, timestamp); } void diff --git a/src/core/display.c b/src/core/display.c index d3ab6351..57029807 100644 --- a/src/core/display.c +++ b/src/core/display.c @@ -47,7 +47,6 @@ #include "bell.h" #include "effects.h" #include "meta-compositor.h" -#include <gdk/gdkx.h> #include <libmetacity/meta-frame-borders.h> #include <X11/Xatom.h> #include <X11/cursorfont.h> @@ -1379,39 +1378,6 @@ meta_display_queue_autoraise_callback (MetaDisplay *display, display->autoraise_window = window; } -static GdkEvent * -button_press_event_new (XEvent *xevent, - gint scale) -{ - GdkDisplay *display; - GdkSeat *seat; - GdkWindow *window; - GdkDevice *device; - GdkEvent *event; - - display = gdk_display_get_default (); - seat = gdk_display_get_default_seat (display); - - window = gdk_x11_window_lookup_for_display (display, xevent->xbutton.window); - device = gdk_seat_get_pointer (seat); - - event = gdk_event_new (GDK_BUTTON_PRESS); - - event->button.window = window ? g_object_ref (window) : NULL; - event->button.send_event = xevent->xbutton.send_event ? TRUE : FALSE; - event->button.time = xevent->xbutton.time; - event->button.x = xevent->xbutton.x / scale; - event->button.y = xevent->xbutton.y / scale; - event->button.state = (GdkModifierType) xevent->xbutton.state; - event->button.button = xevent->xbutton.button; - event->button.x_root = xevent->xbutton.x_root / scale; - event->button.y_root = xevent->xbutton.y_root / scale; - - gdk_event_set_device (event, device); - - return event; -} - static void update_focus_window (MetaDisplay *display, MetaWindow *window, @@ -2001,21 +1967,16 @@ event_callback (XEvent *event, else if (event->xbutton.button == meta_prefs_get_mouse_button_menu()) { GdkRectangle rect; - gint scale; - GdkEvent *gdk_event; if (meta_prefs_get_raise_on_click ()) meta_window_raise (window); - rect.x = event->xbutton.x; - rect.y = event->xbutton.y; + rect.x = event->xbutton.x_root; + rect.y = event->xbutton.y_root; rect.width = 0; rect.height = 0; - scale = meta_ui_get_scale (display->screen->ui); - gdk_event = button_press_event_new (event, scale); - meta_window_show_menu (window, &rect, gdk_event); - gdk_event_free (gdk_event); + meta_window_show_menu (window, &rect, event->xbutton.time); } if (!frame_was_receiver && unmodified) diff --git a/src/core/keybindings.c b/src/core/keybindings.c index 87cdfd01..af61f7b0 100644 --- a/src/core/keybindings.c +++ b/src/core/keybindings.c @@ -36,7 +36,6 @@ #include "effects.h" #include "util.h" -#include <gdk/gdkx.h> #include <X11/keysym.h> #include <string.h> #include <stdio.h> @@ -2760,34 +2759,6 @@ handle_panel (MetaDisplay *display, meta_error_trap_pop (display); } -static GdkEvent * -key_press_event_new (XEvent *xevent) -{ - GdkDisplay *display; - GdkSeat *seat; - GdkWindow *window; - GdkDevice *device; - GdkEvent *event; - - display = gdk_display_get_default (); - seat = gdk_display_get_default_seat (display); - - window = gdk_x11_window_foreign_new_for_display (display, xevent->xkey.window); - device = gdk_seat_get_keyboard (seat); - - event = gdk_event_new (GDK_KEY_PRESS); - - event->key.window = window; - event->key.send_event = xevent->xkey.send_event ? TRUE : FALSE; - event->key.time = xevent->xkey.time; - event->key.state = (GdkModifierType) xevent->xkey.state; - event->key.hardware_keycode = xevent->xkey.keycode; - - gdk_event_set_device (event, device); - - return event; -} - static void handle_activate_window_menu (MetaDisplay *display, MetaScreen *screen, @@ -2798,18 +2769,9 @@ handle_activate_window_menu (MetaDisplay *display, if (display->focus_window) { GdkRectangle rect; - GdkEvent *gdk_event; - if (display->focus_window->frame) - { - rect.x = display->focus_window->rect.x; - rect.y = display->focus_window->rect.y; - } - else - { - rect.x = 0; - rect.y = 0; - } + meta_window_get_position (display->focus_window, + &rect.x, &rect.y); rect.width = display->focus_window->rect.width; rect.height = 0; @@ -2823,9 +2785,7 @@ handle_activate_window_menu (MetaDisplay *display, display->focus_window->custom_frame_extents.right; } - gdk_event = key_press_event_new (event); - meta_window_show_menu (display->focus_window, &rect, gdk_event); - gdk_event_free (gdk_event); + meta_window_show_menu (display->focus_window, &rect, event->xkey.time); } } diff --git a/src/core/window-private.h b/src/core/window-private.h index f3ab63d8..faa546c7 100644 --- a/src/core/window-private.h +++ b/src/core/window-private.h @@ -601,7 +601,7 @@ unsigned long meta_window_get_net_wm_desktop (MetaWindow *window); void meta_window_show_menu (MetaWindow *window, const GdkRectangle *rect, - const GdkEvent *event); + guint32 timestamp); gboolean meta_window_titlebar_is_onscreen (MetaWindow *window); void meta_window_shove_titlebar_onscreen (MetaWindow *window); diff --git a/src/core/window.c b/src/core/window.c index 6fae030b..8a9d3fad 100644 --- a/src/core/window.c +++ b/src/core/window.c @@ -7130,7 +7130,7 @@ menu_callback (MetaWindowMenu *menu, void meta_window_show_menu (MetaWindow *window, const GdkRectangle *rect, - const GdkEvent *event) + guint32 timestamp) { MetaMenuOp ops; MetaMenuOp insensitive; @@ -7253,7 +7253,7 @@ meta_window_show_menu (MetaWindow *window, meta_verbose ("Popping up window menu for %s\n", window->desc); - meta_ui_window_menu_popup (menu, rect, event); + meta_ui_window_menu_popup (menu, rect, timestamp); } void diff --git a/src/include/core.h b/src/include/core.h index 364decc6..77a47be1 100644 --- a/src/include/core.h +++ b/src/include/core.h @@ -159,10 +159,10 @@ int meta_core_get_frame_workspace (Display *xdisplay, const char* meta_core_get_workspace_name_with_index (Display *xdisplay, int index); -void meta_core_show_window_menu (Display *xdisplay, - Window frame_xwindow, - const GdkRectangle *rect, - const GdkEventButton *event); +void meta_core_show_window_menu (Display *xdisplay, + Window frame_xwindow, + const GdkRectangle *rect, + guint32 timestamp); void meta_core_get_menu_accelerator (MetaMenuOp menu_op, int workspace, diff --git a/src/include/ui.h b/src/include/ui.h index 25d0bc1c..e032e6fe 100644 --- a/src/include/ui.h +++ b/src/include/ui.h @@ -134,7 +134,7 @@ MetaWindowMenu* meta_ui_window_menu_new (MetaUI *ui, gpointer data); void meta_ui_window_menu_popup (MetaWindowMenu *menu, const GdkRectangle *rect, - const GdkEvent *event); + guint32 timestamp); void meta_ui_window_menu_free (MetaWindowMenu *menu); diff --git a/src/ui/frames.c b/src/ui/frames.c index ab7e0d8a..1a661d85 100644 --- a/src/ui/frames.c +++ b/src/ui/frames.c @@ -1663,13 +1663,13 @@ meta_frame_titlebar_event (MetaFrames *frames, { GdkRectangle rect; - rect.x = event->x; - rect.y = event->y; + rect.x = event->x_root; + rect.y = event->y_root; rect.width = 0; rect.height = 0; meta_core_show_window_menu (frames->xdisplay, frame->xwindow, - &rect, event); + &rect, event->time); } break; @@ -1834,10 +1834,14 @@ meta_frames_button_press_event (GtkWidget *widget, return FALSE; } + /* convert to root coords */ + rect.x += event->x_root - event->x; + rect.y += event->y_root - event->y; + frame->ignore_leave_notify = TRUE; meta_core_show_window_menu (frames->xdisplay, frame->xwindow, - &rect, event); + &rect, event->time); } } else if (event->button == 1 && diff --git a/src/ui/menu.c b/src/ui/menu.c index 7d946e18..1d30504c 100644 --- a/src/ui/menu.c +++ b/src/ui/menu.c @@ -454,14 +454,26 @@ meta_window_menu_new (MetaFrames *frames, void meta_window_menu_popup (MetaWindowMenu *menu, const GdkRectangle *rect, - const GdkEvent *event) + guint32 timestamp) { - GdkEventAny *any; + GdkDisplay *display; + GdkEvent *event; + GdkWindow *window; + GdkDevice *device; - any = (GdkEventAny *) event; + display = gdk_display_get_default (); + + event = gdk_event_new (GDK_BUTTON_PRESS); + event->button.time = timestamp; + + window = gdk_screen_get_root_window (gdk_display_get_default_screen (display)); + event->button.window = g_object_ref (window); + + device = gdk_seat_get_pointer (gdk_display_get_default_seat (display)); + gdk_event_set_device (event, device); gtk_menu_popup_at_rect (GTK_MENU (menu->menu), - any->window, rect, + event->any.window, rect, GDK_GRAVITY_SOUTH_WEST, GDK_GRAVITY_NORTH_WEST, event); @@ -470,6 +482,8 @@ meta_window_menu_popup (MetaWindowMenu *menu, { g_warning ("GtkMenu failed to grab the pointer"); } + + gdk_event_free (event); } void diff --git a/src/ui/menu.h b/src/ui/menu.h index 183a0e2d..16f73422 100644 --- a/src/ui/menu.h +++ b/src/ui/menu.h @@ -46,7 +46,7 @@ MetaWindowMenu* meta_window_menu_new (MetaFrames *frames, gpointer data); void meta_window_menu_popup (MetaWindowMenu *menu, const GdkRectangle *rect, - const GdkEvent *event); + guint32 timestamp); void meta_window_menu_free (MetaWindowMenu *menu); diff --git a/src/ui/ui.c b/src/ui/ui.c index 73082858..eb75e00e 100644 --- a/src/ui/ui.c +++ b/src/ui/ui.c @@ -629,9 +629,9 @@ meta_ui_window_menu_new (MetaUI *ui, void meta_ui_window_menu_popup (MetaWindowMenu *menu, const GdkRectangle *rect, - const GdkEvent *event) + guint32 timestamp) { - meta_window_menu_popup (menu, rect, event); + meta_window_menu_popup (menu, rect, timestamp); } void |