[gtk+] W32: avoid code duplication in gdkdevice-win32|virtual
- From: Ignacio Casal Quinteiro <icq src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] W32: avoid code duplication in gdkdevice-win32|virtual
- Date: Tue, 22 Dec 2015 08:32:43 +0000 (UTC)
commit 7f17468afc761ae63f1b5581c7769c9d97453f65
Author: Paolo Borelli <pborelli gnome org>
Date: Sat Dec 19 10:31:32 2015 +0100
W32: avoid code duplication in gdkdevice-win32|virtual
The same get_position function is cut and pasted in the two
classes.
gdk/win32/gdkdevice-virtual.c | 96 +----------------------------------------
gdk/win32/gdkdevice-win32.c | 19 +++-----
gdk/win32/gdkdevice-win32.h | 6 +++
3 files changed, 15 insertions(+), 106 deletions(-)
---
diff --git a/gdk/win32/gdkdevice-virtual.c b/gdk/win32/gdkdevice-virtual.c
index b947800..e6410ea 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)
diff --git a/gdk/win32/gdkdevice-win32.c b/gdk/win32/gdkdevice-win32.c
index 3554a7a..d27034c 100644
--- a/gdk/win32/gdkdevice-win32.c
+++ b/gdk/win32/gdkdevice-win32.c
@@ -61,11 +61,6 @@ static GdkGrabStatus gdk_device_win32_grab (GdkDevice *device,
guint32 time_);
static void gdk_device_win32_ungrab (GdkDevice *device,
guint32 time_);
-static GdkWindow * gdk_device_win32_window_at_position (GdkDevice *device,
- gdouble *win_x,
- gdouble *win_y,
- GdkModifierType *mask,
- gboolean get_toplevel);
static void gdk_device_win32_select_window_events (GdkDevice *device,
GdkWindow *window,
GdkEventMask event_mask);
@@ -85,7 +80,7 @@ gdk_device_win32_class_init (GdkDeviceWin32Class *klass)
device_class->query_state = gdk_device_win32_query_state;
device_class->grab = gdk_device_win32_grab;
device_class->ungrab = gdk_device_win32_ungrab;
- device_class->window_at_position = gdk_device_win32_window_at_position;
+ device_class->window_at_position = _gdk_device_win32_window_at_position;
device_class->select_window_events = gdk_device_win32_select_window_events;
}
@@ -263,12 +258,12 @@ screen_to_client (HWND hwnd, POINT screen_pt, POINT *client_pt)
ScreenToClient (hwnd, client_pt);
}
-static GdkWindow *
-gdk_device_win32_window_at_position (GdkDevice *device,
- gdouble *win_x,
- gdouble *win_y,
- GdkModifierType *mask,
- gboolean get_toplevel)
+GdkWindow *
+_gdk_device_win32_window_at_position (GdkDevice *device,
+ gdouble *win_x,
+ gdouble *win_y,
+ GdkModifierType *mask,
+ gboolean get_toplevel)
{
GdkWindow *window = NULL;
POINT screen_pt, client_pt;
diff --git a/gdk/win32/gdkdevice-win32.h b/gdk/win32/gdkdevice-win32.h
index a32fced..b1dd80d 100644
--- a/gdk/win32/gdkdevice-win32.h
+++ b/gdk/win32/gdkdevice-win32.h
@@ -44,6 +44,12 @@ struct _GdkDeviceWin32Class
GType gdk_device_win32_get_type (void) G_GNUC_CONST;
+GdkWindow *_gdk_device_win32_window_at_position (GdkDevice *device,
+ gdouble *win_x,
+ gdouble *win_y,
+ GdkModifierType *mask,
+ gboolean get_toplevel);
+
G_END_DECLS
#endif /* __GDK_DEVICE_WIN32_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]