[gtk+] wayland: Set GdkWindow focused state based on keyboard focus
- From: Kristian HÃgsberg <krh src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+] wayland: Set GdkWindow focused state based on keyboard focus
- Date: Mon, 16 Jan 2012 20:38:25 +0000 (UTC)
commit 7328cc73aa047d203956069aac52b8f138d995dd
Author: Kristian HÃgsberg <krh bitplanet net>
Date: Mon Jan 16 10:20:36 2012 -0500
wayland: Set GdkWindow focused state based on keyboard focus
gdk/wayland/gdkdevice-wayland.c | 3 ++
gdk/wayland/gdkprivate-wayland.h | 2 +
gdk/wayland/gdkwindow-wayland.c | 51 +++++++++++++++----------------------
3 files changed, 26 insertions(+), 30 deletions(-)
---
diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c
index 1e0080f..09ec304 100644
--- a/gdk/wayland/gdkdevice-wayland.c
+++ b/gdk/wayland/gdkdevice-wayland.c
@@ -675,6 +675,7 @@ input_handle_keyboard_focus(void *data,
device->time = time;
if (device->keyboard_focus)
{
+ _gdk_wayland_window_remove_focus (device->keyboard_focus);
event = gdk_event_new (GDK_FOCUS_CHANGE);
event->focus_change.window = g_object_ref (device->keyboard_focus);
event->focus_change.send_event = FALSE;
@@ -709,6 +710,8 @@ input_handle_keyboard_focus(void *data,
device, device->keyboard_focus));
_gdk_wayland_display_deliver_event (device->display, event);
+
+ _gdk_wayland_window_add_focus (device->keyboard_focus);
}
}
diff --git a/gdk/wayland/gdkprivate-wayland.h b/gdk/wayland/gdkprivate-wayland.h
index e876494..68b81d6 100644
--- a/gdk/wayland/gdkprivate-wayland.h
+++ b/gdk/wayland/gdkprivate-wayland.h
@@ -49,6 +49,8 @@ void _gdk_wayland_window_update_size (GdkWindow *window,
int32_t width,
int32_t height,
uint32_t edges);
+void _gdk_wayland_window_add_focus (GdkWindow *window);
+void _gdk_wayland_window_remove_focus (GdkWindow *window);
GdkKeymap *_gdk_wayland_keymap_new (GdkDisplay *display);
struct xkb_desc *_gdk_wayland_keymap_get_xkb_desc (GdkKeymap *keymap);
diff --git a/gdk/wayland/gdkwindow-wayland.c b/gdk/wayland/gdkwindow-wayland.c
index c773c8b..834642e 100644
--- a/gdk/wayland/gdkwindow-wayland.c
+++ b/gdk/wayland/gdkwindow-wayland.c
@@ -109,36 +109,7 @@ struct _GdkWindowImplWayland
GLuint texture;
uint32_t resize_edges;
- /* Set if the window, or any descendent of it, is the server's focus window
- */
- guint has_focus_window : 1;
-
- /* Set if window->has_focus_window and the focus isn't grabbed elsewhere.
- */
- guint has_focus : 1;
-
- /* Set if the pointer is inside this window. (This is needed for
- * for focus tracking)
- */
- guint has_pointer : 1;
-
- /* Set if the window is a descendent of the focus window and the pointer is
- * inside it. (This is the case where the window will receive keystroke
- * events even window->has_focus_window is FALSE)
- */
- guint has_pointer_focus : 1;
-
- /* Set if we are requesting these hints */
- guint skip_taskbar_hint : 1;
- guint skip_pager_hint : 1;
- guint urgency_hint : 1;
-
- guint on_all_desktops : 1; /* _NET_WM_STICKY == 0xFFFFFFFF */
-
- guint have_sticky : 1; /* _NET_WM_STATE_STICKY */
- guint have_maxvert : 1; /* _NET_WM_STATE_MAXIMIZED_VERT */
- guint have_maxhorz : 1; /* _NET_WM_STATE_MAXIMIZED_HORZ */
- guint have_fullscreen : 1; /* _NET_WM_STATE_FULLSCREEN */
+ int focus_count;
gulong map_serial; /* Serial of last transition from unmapped */
@@ -165,6 +136,26 @@ _gdk_window_impl_wayland_init (GdkWindowImplWayland *impl)
impl->toplevel_window_type = -1;
}
+void
+_gdk_wayland_window_add_focus (GdkWindow *window)
+{
+ GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
+
+ impl->focus_count++;
+ if (impl->focus_count == 1)
+ gdk_synthesize_window_state (window, 0, GDK_WINDOW_STATE_FOCUSED);
+}
+
+void
+_gdk_wayland_window_remove_focus (GdkWindow *window)
+{
+ GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
+
+ impl->focus_count--;
+ if (impl->focus_count == 0)
+ gdk_synthesize_window_state (window, GDK_WINDOW_STATE_FOCUSED, 0);
+}
+
/**
* _gdk_wayland_window_update_size:
* @drawable: a #GdkDrawableImplWayland.
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]