summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/core.c12
-rw-r--r--src/core/display.c45
-rw-r--r--src/core/keybindings.c46
-rw-r--r--src/core/window-private.h2
-rw-r--r--src/core/window.c4
-rw-r--r--src/include/core.h8
-rw-r--r--src/include/ui.h2
-rw-r--r--src/ui/frames.c12
-rw-r--r--src/ui/menu.c22
-rw-r--r--src/ui/menu.h2
-rw-r--r--src/ui/ui.c4
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