summaryrefslogtreecommitdiff
path: root/gdk/win32/gdkdevice-virtual.c
diff options
context:
space:
mode:
authorPaolo Borelli <pborelli@gnome.org>2015-12-19 10:31:32 +0100
committerIgnacio Casal Quinteiro <icq@gnome.org>2015-12-22 09:31:56 +0100
commit7f17468afc761ae63f1b5581c7769c9d97453f65 (patch)
tree7cae43afd326c07a92bd6436e2c47660c3351610 /gdk/win32/gdkdevice-virtual.c
parent75b3eec7a6549f0c2cf56d5b831c83aa939de3c7 (diff)
downloadgtk+-7f17468afc761ae63f1b5581c7769c9d97453f65.tar.gz
W32: avoid code duplication in gdkdevice-win32|virtual
The same get_position function is cut and pasted in the two classes.
Diffstat (limited to 'gdk/win32/gdkdevice-virtual.c')
-rw-r--r--gdk/win32/gdkdevice-virtual.c96
1 files changed, 2 insertions, 94 deletions
diff --git a/gdk/win32/gdkdevice-virtual.c b/gdk/win32/gdkdevice-virtual.c
index b947800240..e6410eac0e 100644
--- a/gdk/win32/gdkdevice-virtual.c
+++ b/gdk/win32/gdkdevice-virtual.c
@@ -24,6 +24,7 @@
#include "gdkdisplayprivate.h"
#include "gdkdevice-virtual.h"
+#include "gdkdevice-win32.h"
#include "gdkwin32.h"
static gboolean gdk_device_virtual_get_history (GdkDevice *device,
@@ -61,11 +62,6 @@ static GdkGrabStatus gdk_device_virtual_grab (GdkDevice *device,
guint32 time_);
static void gdk_device_virtual_ungrab (GdkDevice *device,
guint32 time_);
-static GdkWindow * gdk_device_virtual_window_at_position (GdkDevice *device,
- gdouble *win_x,
- gdouble *win_y,
- GdkModifierType *mask,
- gboolean get_toplevel);
static void gdk_device_virtual_select_window_events (GdkDevice *device,
GdkWindow *window,
GdkEventMask event_mask);
@@ -85,7 +81,7 @@ gdk_device_virtual_class_init (GdkDeviceVirtualClass *klass)
device_class->query_state = gdk_device_virtual_query_state;
device_class->grab = gdk_device_virtual_grab;
device_class->ungrab = gdk_device_virtual_ungrab;
- device_class->window_at_position = gdk_device_virtual_window_at_position;
+ device_class->window_at_position = _gdk_device_win32_window_at_position;
device_class->select_window_events = gdk_device_virtual_select_window_events;
}
@@ -312,94 +308,6 @@ gdk_device_virtual_ungrab (GdkDevice *device,
}
static void
-screen_to_client (HWND hwnd, POINT screen_pt, POINT *client_pt)
-{
- *client_pt = screen_pt;
- ScreenToClient (hwnd, client_pt);
-}
-
-static GdkWindow *
-gdk_device_virtual_window_at_position (GdkDevice *device,
- gdouble *win_x,
- gdouble *win_y,
- GdkModifierType *mask,
- gboolean get_toplevel)
-{
- GdkWindow *window = NULL;
- POINT screen_pt, client_pt;
- HWND hwnd, hwndc;
- RECT rect;
-
- GetCursorPos (&screen_pt);
-
- if (get_toplevel)
- {
- /* Only consider visible children of the desktop to avoid the various
- * non-visible windows you often find on a running Windows box. These
- * might overlap our windows and cause our walk to fail. As we assume
- * WindowFromPoint() can find our windows, we follow similar logic
- * here, and ignore invisible and disabled windows.
- */
- hwnd = GetDesktopWindow ();
- do {
- window = gdk_win32_handle_table_lookup (hwnd);
-
- if (window != NULL &&
- GDK_WINDOW_TYPE (window) != GDK_WINDOW_ROOT &&
- GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
- break;
-
- screen_to_client (hwnd, screen_pt, &client_pt);
- hwndc = ChildWindowFromPointEx (hwnd, client_pt, CWP_SKIPDISABLED |
- CWP_SKIPINVISIBLE);
-
- /* Verify that we're really inside the client area of the window */
- if (hwndc != hwnd)
- {
- GetClientRect (hwndc, &rect);
- screen_to_client (hwndc, screen_pt, &client_pt);
- if (!PtInRect (&rect, client_pt))
- hwndc = hwnd;
- }
-
- } while (hwndc != hwnd && (hwnd = hwndc, 1));
-
- }
- else
- {
- hwnd = WindowFromPoint (screen_pt);
-
- /* Verify that we're really inside the client area of the window */
- GetClientRect (hwnd, &rect);
- screen_to_client (hwnd, screen_pt, &client_pt);
- if (!PtInRect (&rect, client_pt))
- hwnd = NULL;
-
- /* If we didn't hit any window at that point, return the desktop */
- if (hwnd == NULL)
- {
- if (win_x)
- *win_x = screen_pt.x + _gdk_offset_x;
- if (win_y)
- *win_y = screen_pt.y + _gdk_offset_y;
- return _gdk_root;
- }
-
- window = gdk_win32_handle_table_lookup (hwnd);
- }
-
- if (window && (win_x || win_y))
- {
- if (win_x)
- *win_x = client_pt.x;
- if (win_y)
- *win_y = client_pt.y;
- }
-
- return window;
-}
-
-static void
gdk_device_virtual_select_window_events (GdkDevice *device,
GdkWindow *window,
GdkEventMask event_mask)