summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlberts Muktupāvels <alberts.muktupavels@gmail.com>2021-12-26 15:32:44 +0200
committerMarco Trevisan <mail@3v1n0.net>2022-02-17 13:35:41 +0000
commitf7d054df3f5b0c4f1a9cd6b300d303bd71f455ab (patch)
treef495e0de7d01d296a88defbe57e8db988f9d89ed
parent674a1594c5d4d78c98b0a270fc81543d64f0a034 (diff)
downloadlibwnck-f7d054df3f5b0c4f1a9cd6b300d303bd71f455ab.tar.gz
screen: store WnckHandle in struct
Before 5ab809143a7d commit event filter was added in wnck_screen_get when constructing first screen. Store WnckHandle in WnckScreen struct to ensure that event filter is always added otherwise we might end up without event filter if on startup nothing calls _wnck_get_handle. This change introduces new requirement - wnck_set_client_type must be used before using WnckScreen APIs.
-rw-r--r--libwnck/private.h2
-rw-r--r--libwnck/screen.c12
2 files changed, 14 insertions, 0 deletions
diff --git a/libwnck/private.h b/libwnck/private.h
index f1a4af2..d37c328 100644
--- a/libwnck/private.h
+++ b/libwnck/private.h
@@ -133,6 +133,8 @@ SnDisplay* _wnck_screen_get_sn_display (WnckScreen *screen);
WnckScreen* _wnck_screen_get_existing (int number);
+WnckHandle *_wnck_screen_get_handle (WnckScreen *screen);
+
void _wnck_pager_activate_workspace (WnckWorkspace *wspace,
guint32 timestamp);
int _wnck_pager_get_n_workspaces (WnckPager *pager);
diff --git a/libwnck/screen.c b/libwnck/screen.c
index d6db387..473c3fc 100644
--- a/libwnck/screen.c
+++ b/libwnck/screen.c
@@ -69,6 +69,8 @@ static WnckScreen** screens = NULL;
struct _WnckScreenPrivate
{
+ WnckHandle *handle;
+
int number;
Window xroot;
Screen *xscreen;
@@ -529,6 +531,8 @@ wnck_screen_construct (Display *display,
WnckScreen *screen,
int number)
{
+ screen->priv->handle = _wnck_get_handle ();
+
/* Create the initial state of the screen. */
screen->priv->xroot = RootWindow (display, number);
screen->priv->xscreen = ScreenOfDisplay (display, number);
@@ -674,6 +678,14 @@ wnck_screen_get_for_root (gulong root_window_id)
return NULL;
}
+WnckHandle *
+_wnck_screen_get_handle (WnckScreen *screen)
+{
+ g_return_val_if_fail (WNCK_IS_SCREEN (screen), NULL);
+
+ return screen->priv->handle;
+}
+
/**
* wnck_screen_get_number:
* @screen: a #WnckScreen.