1
diff --git a/src/oxygenwindowmanager.cpp b/src/oxygenwindowmanager.cpp
2
index 4986384..c4ecedb 100644
3
--- a/src/oxygenwindowmanager.cpp
4
+++ b/src/oxygenwindowmanager.cpp
6
#include "oxygenstyle.h"
9
-#ifdef GDK_WINDOWING_X11
10
-#include <gdk/gdkx.h>
16
@@ -48,7 +44,8 @@ namespace Oxygen
18
_lastRejectedEvent( 0L ),
25
std::cerr << "Oxygen::WindowManager::WindowManager" << std::endl;
26
@@ -179,6 +176,7 @@ namespace Oxygen
34
@@ -390,51 +388,22 @@ namespace Oxygen
35
if( distance < _dragDistance ) return false;
37
// start drag from current position
38
- return startDrag( widget, int(event->x_root), int(event->y_root) );
39
+ return startDrag( widget, int(event->x_root), int(event->y_root), event->time );
43
//_________________________________________________________________
44
- bool WindowManager::startDrag( GtkWidget* widget, int x, int y )
45
+ bool WindowManager::startDrag( GtkWidget* widget, int x, int y, guint32 time )
48
- #ifdef GDK_WINDOWING_X11
49
// create xevent and send.
51
GtkWindow* topLevel = GTK_WINDOW( gtk_widget_get_toplevel( widget ) );
52
- GdkWindow* window = gtk_widget_get_window( GTK_WIDGET( topLevel ) );
53
- GdkDisplay* display = gtk_widget_get_display( GTK_WIDGET( topLevel ) );
54
- GdkWindow* root = gdk_screen_get_root_window( gtk_window_get_screen( topLevel ) );
56
- xev.xclient.type = ClientMessage;
57
- xev.xclient.message_type = gdk_x11_get_xatom_by_name_for_display(display, "_NET_WM_MOVERESIZE");
58
- xev.xclient.display = GDK_DISPLAY_XDISPLAY(display);
59
- xev.xclient.window = GDK_WINDOW_XID(window);
60
- xev.xclient.format = 32;
61
- xev.xclient.data.l[0] = x;
62
- xev.xclient.data.l[1] = y;
63
- xev.xclient.data.l[2] = 8; // NET::Move
64
- xev.xclient.data.l[3] = Button1;
65
- xev.xclient.data.l[4] = 0;
66
- XUngrabPointer(GDK_DISPLAY_XDISPLAY(display), CurrentTime);
69
- GDK_DISPLAY_XDISPLAY(display),
70
- GDK_WINDOW_XID(root),
72
- SubstructureRedirectMask | SubstructureNotifyMask,
74
+ gtk_window_begin_move_drag( topLevel, 1, x, y, time );
76
// force a release as some widgets miss it...
88
//_________________________________________________
89
@@ -445,6 +414,7 @@ namespace Oxygen
90
_lastRejectedEvent = 0L;
96
if( _timer.isRunning() ) _timer.stop();
97
@@ -452,10 +422,6 @@ namespace Oxygen
101
- #ifdef GDK_WINDOWING_X11
102
- gdk_pointer_ungrab( CurrentTime );
108
@@ -475,6 +441,7 @@ namespace Oxygen
110
_x = int(event->x_root);
111
_y = int(event->y_root);
112
+ _time = event->time;
115
if( _timer.isRunning() ) _timer.stop();
116
diff --git a/src/oxygenwindowmanager.h b/src/oxygenwindowmanager.h
117
index f8a774e..0687646 100644
118
--- a/src/oxygenwindowmanager.h
119
+++ b/src/oxygenwindowmanager.h
120
@@ -124,11 +124,11 @@ namespace Oxygen
121
bool startDrag( GtkWidget*, GdkEventMotion* );
123
//! start dragging widget
124
- bool startDrag( GtkWidget*, int, int );
125
+ bool startDrag( GtkWidget*, int, int, guint32 );
127
//! start dragging widget
128
void startDrag( void )
129
- { if( _drag && _widget ) startDrag( _widget, _x, _y ); }
130
+ { if( _drag && _widget ) startDrag( _widget, _x, _y, _time ); }
132
//! finish dragging widget
133
bool finishDrag( void );
134
@@ -249,6 +249,9 @@ namespace Oxygen
141
//! widget typenames black-list
142
std::vector<std::string> _blackList;