[metacity] menu: change event parameter back to timestamp
- From: Alberts Muktupāvels <muktupavels src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [metacity] menu: change event parameter back to timestamp
- Date: Wed, 14 Aug 2019 13:04:20 +0000 (UTC)
commit af0bbded4856cf7c81dc81b8313b4034f5b19d06
Author: Alberts Muktupāvels <alberts muktupavels gmail com>
Date: Wed Aug 14 14:04:18 2019 +0300
menu: change event parameter back to timestamp
Commit 37fa0d19f35a replaced gtk_menu_popup with gtk_menu_popup_at_rect
to avoid deprecated warning making it more complicated then needed.
gtk_menu_popup_at_rect requires two parameters that are not always
available. For example we don't have GdkWindow for CSD windows. And
next commit will popup menu in response of ClientMessage event where
we don't have any info about key and/or button press events.
Simplify code by creating fake event in menu.c with minimal data
needed for gtk_menu_popup_at_rect. GdkEvent is used to get GdkDevice,
button and time. For GdkWindow we can use root window.
src/core/core.c | 12 ++++++------
src/core/display.c | 45 +++------------------------------------------
src/core/keybindings.c | 46 +++-------------------------------------------
src/core/window-private.h | 2 +-
src/core/window.c | 4 ++--
src/include/core.h | 8 ++++----
src/include/ui.h | 2 +-
src/ui/frames.c | 12 ++++++++----
src/ui/menu.c | 22 ++++++++++++++++++----
src/ui/menu.h | 2 +-
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
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]