Compare commits
4 Commits
css-variab
...
wip/matthi
Author | SHA1 | Date | |
---|---|---|---|
|
a7564a15e1 | ||
|
6e1c1d89d7 | ||
|
76b7f65452 | ||
|
69b6be6bc9 |
@@ -47,13 +47,9 @@ static void gdk_window_impl_broadway_finalize (GObject *obje
|
|||||||
|
|
||||||
static const cairo_user_data_key_t gdk_broadway_cairo_key;
|
static const cairo_user_data_key_t gdk_broadway_cairo_key;
|
||||||
|
|
||||||
#define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window) \
|
#define WINDOW_IS_TOPLEVEL(window) \
|
||||||
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD)
|
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD)
|
||||||
|
|
||||||
#define WINDOW_IS_TOPLEVEL(window) \
|
|
||||||
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
|
|
||||||
GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
||||||
|
|
||||||
struct _GdkBroadwayWindow {
|
struct _GdkBroadwayWindow {
|
||||||
GdkWindow parent;
|
GdkWindow parent;
|
||||||
};
|
};
|
||||||
@@ -391,12 +387,7 @@ static void
|
|||||||
gdk_broadway_window_destroy_notify (GdkWindow *window)
|
gdk_broadway_window_destroy_notify (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (!GDK_WINDOW_DESTROYED (window))
|
if (!GDK_WINDOW_DESTROYED (window))
|
||||||
{
|
_gdk_window_destroy (window, TRUE);
|
||||||
if (GDK_WINDOW_TYPE(window) != GDK_WINDOW_FOREIGN)
|
|
||||||
g_warning ("GdkWindow %p unexpectedly destroyed", window);
|
|
||||||
|
|
||||||
_gdk_window_destroy (window, TRUE);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref (window);
|
g_object_unref (window);
|
||||||
}
|
}
|
||||||
@@ -800,7 +791,7 @@ gdk_broadway_window_set_icon_name (GdkWindow *window,
|
|||||||
const gchar *name)
|
const gchar *name)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
g_object_set_qdata (G_OBJECT (window), g_quark_from_static_string ("gdk-icon-name-set"),
|
g_object_set_qdata (G_OBJECT (window), g_quark_from_static_string ("gdk-icon-name-set"),
|
||||||
@@ -811,7 +802,7 @@ static void
|
|||||||
gdk_broadway_window_iconify (GdkWindow *window)
|
gdk_broadway_window_iconify (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -819,7 +810,7 @@ static void
|
|||||||
gdk_broadway_window_deiconify (GdkWindow *window)
|
gdk_broadway_window_deiconify (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -827,7 +818,7 @@ static void
|
|||||||
gdk_broadway_window_stick (GdkWindow *window)
|
gdk_broadway_window_stick (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -836,7 +827,7 @@ static void
|
|||||||
gdk_broadway_window_unstick (GdkWindow *window)
|
gdk_broadway_window_unstick (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -850,7 +841,7 @@ gdk_broadway_window_maximize (GdkWindow *window)
|
|||||||
GdkRectangle geom;
|
GdkRectangle geom;
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||||
@@ -882,7 +873,7 @@ gdk_broadway_window_unmaximize (GdkWindow *window)
|
|||||||
GdkWindowImplBroadway *impl;
|
GdkWindowImplBroadway *impl;
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||||
@@ -905,7 +896,7 @@ static void
|
|||||||
gdk_broadway_window_fullscreen (GdkWindow *window)
|
gdk_broadway_window_fullscreen (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -914,7 +905,7 @@ static void
|
|||||||
gdk_broadway_window_unfullscreen (GdkWindow *window)
|
gdk_broadway_window_unfullscreen (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -926,7 +917,7 @@ gdk_broadway_window_set_keep_above (GdkWindow *window,
|
|||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -937,7 +928,7 @@ gdk_broadway_window_set_keep_below (GdkWindow *window, gboolean setting)
|
|||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -963,7 +954,7 @@ gdk_broadway_window_set_decorations (GdkWindow *window,
|
|||||||
GdkWMDecoration decorations)
|
GdkWMDecoration decorations)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -975,7 +966,7 @@ gdk_broadway_window_get_decorations (GdkWindow *window,
|
|||||||
gboolean result = FALSE;
|
gboolean result = FALSE;
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
@@ -988,7 +979,7 @@ gdk_broadway_window_set_functions (GdkWindow *window,
|
|||||||
g_return_if_fail (GDK_IS_WINDOW (window));
|
g_return_if_fail (GDK_IS_WINDOW (window));
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1372,7 +1363,7 @@ gdk_broadway_window_begin_resize_drag (GdkWindow *window,
|
|||||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (impl->maximized)
|
if (impl->maximized)
|
||||||
@@ -1412,7 +1403,7 @@ gdk_broadway_window_begin_move_drag (GdkWindow *window,
|
|||||||
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
impl = GDK_WINDOW_IMPL_BROADWAY (window->impl);
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (impl->maximized)
|
if (impl->maximized)
|
||||||
|
@@ -723,12 +723,6 @@ gdk_event_copy (const GdkEvent *event)
|
|||||||
sizeof (gdouble) * gdk_device_get_n_axes (event->motion.device));
|
sizeof (gdouble) * gdk_device_get_n_axes (event->motion.device));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_OWNER_CHANGE:
|
|
||||||
new_event->owner_change.owner = event->owner_change.owner;
|
|
||||||
if (new_event->owner_change.owner)
|
|
||||||
g_object_ref (new_event->owner_change.owner);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_SELECTION_CLEAR:
|
case GDK_SELECTION_CLEAR:
|
||||||
case GDK_SELECTION_NOTIFY:
|
case GDK_SELECTION_NOTIFY:
|
||||||
case GDK_SELECTION_REQUEST:
|
case GDK_SELECTION_REQUEST:
|
||||||
@@ -813,19 +807,14 @@ gdk_event_free (GdkEvent *event)
|
|||||||
if (event->expose.region)
|
if (event->expose.region)
|
||||||
cairo_region_destroy (event->expose.region);
|
cairo_region_destroy (event->expose.region);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_MOTION_NOTIFY:
|
case GDK_MOTION_NOTIFY:
|
||||||
g_free (event->motion.axes);
|
g_free (event->motion.axes);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_SETTING:
|
case GDK_SETTING:
|
||||||
g_free (event->setting.name);
|
g_free (event->setting.name);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case GDK_OWNER_CHANGE:
|
|
||||||
if (event->owner_change.owner)
|
|
||||||
g_object_unref (event->owner_change.owner);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case GDK_SELECTION_CLEAR:
|
case GDK_SELECTION_CLEAR:
|
||||||
case GDK_SELECTION_NOTIFY:
|
case GDK_SELECTION_NOTIFY:
|
||||||
|
@@ -1029,7 +1029,6 @@ struct _GdkEventSelection
|
|||||||
* @type: the type of the event (%GDK_OWNER_CHANGE).
|
* @type: the type of the event (%GDK_OWNER_CHANGE).
|
||||||
* @window: the window which received the event
|
* @window: the window which received the event
|
||||||
* @send_event: %TRUE if the event was sent explicitly.
|
* @send_event: %TRUE if the event was sent explicitly.
|
||||||
* @owner: the new owner of the selection, or %NULL if there is none
|
|
||||||
* @reason: the reason for the ownership change as a #GdkOwnerChange value
|
* @reason: the reason for the ownership change as a #GdkOwnerChange value
|
||||||
* @selection: the atom identifying the selection
|
* @selection: the atom identifying the selection
|
||||||
* @time: the timestamp of the event
|
* @time: the timestamp of the event
|
||||||
@@ -1047,7 +1046,6 @@ struct _GdkEventOwnerChange
|
|||||||
GdkEventType type;
|
GdkEventType type;
|
||||||
GdkWindow *window;
|
GdkWindow *window;
|
||||||
gint8 send_event;
|
gint8 send_event;
|
||||||
GdkWindow *owner;
|
|
||||||
GdkOwnerChange reason;
|
GdkOwnerChange reason;
|
||||||
GdkAtom selection;
|
GdkAtom selection;
|
||||||
guint32 time;
|
guint32 time;
|
||||||
|
@@ -1087,7 +1087,6 @@ emit_selection_owner_change (GdkWindow *window,
|
|||||||
|
|
||||||
event = gdk_event_new (GDK_OWNER_CHANGE);
|
event = gdk_event_new (GDK_OWNER_CHANGE);
|
||||||
event->owner_change.window = g_object_ref (window);
|
event->owner_change.window = g_object_ref (window);
|
||||||
event->owner_change.owner = NULL;
|
|
||||||
event->owner_change.reason = GDK_OWNER_CHANGE_NEW_OWNER;
|
event->owner_change.reason = GDK_OWNER_CHANGE_NEW_OWNER;
|
||||||
event->owner_change.selection = atom;
|
event->owner_change.selection = atom;
|
||||||
event->owner_change.time = GDK_CURRENT_TIME;
|
event->owner_change.time = GDK_CURRENT_TIME;
|
||||||
|
@@ -47,13 +47,9 @@ enum {
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL];
|
static guint signals[LAST_SIGNAL];
|
||||||
|
|
||||||
#define WINDOW_IS_TOPLEVEL_OR_FOREIGN(window) \
|
#define WINDOW_IS_TOPLEVEL(window) \
|
||||||
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD)
|
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD)
|
||||||
|
|
||||||
#define WINDOW_IS_TOPLEVEL(window) \
|
|
||||||
(GDK_WINDOW_TYPE (window) != GDK_WINDOW_CHILD && \
|
|
||||||
GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
|
||||||
|
|
||||||
#define MAX_WL_BUFFER_SIZE (4083) /* 4096 minus header, string argument length and NUL byte */
|
#define MAX_WL_BUFFER_SIZE (4083) /* 4096 minus header, string argument length and NUL byte */
|
||||||
|
|
||||||
typedef struct _GdkWaylandWindow GdkWaylandWindow;
|
typedef struct _GdkWaylandWindow GdkWaylandWindow;
|
||||||
@@ -2989,7 +2985,7 @@ gdk_wayland_window_set_geometry_hints (GdkWindow *window,
|
|||||||
int width, height;
|
int width, height;
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
||||||
@@ -3178,7 +3174,7 @@ gdk_wayland_window_iconify (GdkWindow *window)
|
|||||||
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (!impl->display_server.xdg_toplevel)
|
if (!impl->display_server.xdg_toplevel)
|
||||||
@@ -3191,7 +3187,7 @@ static void
|
|||||||
gdk_wayland_window_deiconify (GdkWindow *window)
|
gdk_wayland_window_deiconify (GdkWindow *window)
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (GDK_WINDOW_IS_MAPPED (window))
|
if (GDK_WINDOW_IS_MAPPED (window))
|
||||||
@@ -3352,7 +3348,7 @@ gdk_wayland_window_begin_resize_drag (GdkWindow *window,
|
|||||||
uint32_t resize_edges, serial;
|
uint32_t resize_edges, serial;
|
||||||
|
|
||||||
if (GDK_WINDOW_DESTROYED (window) ||
|
if (GDK_WINDOW_DESTROYED (window) ||
|
||||||
!WINDOW_IS_TOPLEVEL_OR_FOREIGN (window))
|
!WINDOW_IS_TOPLEVEL (window))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
switch (edge)
|
switch (edge)
|
||||||
@@ -3461,9 +3457,7 @@ gdk_wayland_window_destroy_notify (GdkWindow *window)
|
|||||||
{
|
{
|
||||||
if (!GDK_WINDOW_DESTROYED (window))
|
if (!GDK_WINDOW_DESTROYED (window))
|
||||||
{
|
{
|
||||||
if (GDK_WINDOW_TYPE (window) != GDK_WINDOW_FOREIGN)
|
g_warning ("GdkWindow %p unexpectedly destroyed", window);
|
||||||
g_warning ("GdkWindow %p unexpectedly destroyed", window);
|
|
||||||
|
|
||||||
_gdk_window_destroy (window, TRUE);
|
_gdk_window_destroy (window, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -626,13 +626,8 @@ inner_clipboard_window_procedure (HWND hwnd,
|
|||||||
|
|
||||||
GDK_NOTE (DND, g_print (" \n"));
|
GDK_NOTE (DND, g_print (" \n"));
|
||||||
|
|
||||||
owner = gdk_win32_window_lookup_for_display (_gdk_display, hwnd_owner);
|
|
||||||
if (owner == NULL)
|
|
||||||
owner = gdk_win32_window_foreign_new_for_display (_gdk_display, hwnd_owner);
|
|
||||||
|
|
||||||
event = gdk_event_new (GDK_OWNER_CHANGE);
|
event = gdk_event_new (GDK_OWNER_CHANGE);
|
||||||
event->owner_change.window = gdk_get_default_root_window ();
|
event->owner_change.window = gdk_get_default_root_window ();
|
||||||
event->owner_change.owner = owner;
|
|
||||||
event->owner_change.reason = GDK_OWNER_CHANGE_NEW_OWNER;
|
event->owner_change.reason = GDK_OWNER_CHANGE_NEW_OWNER;
|
||||||
event->owner_change.selection = GDK_SELECTION_CLIPBOARD;
|
event->owner_change.selection = GDK_SELECTION_CLIPBOARD;
|
||||||
event->owner_change.time = _gdk_win32_get_next_tick (0);
|
event->owner_change.time = _gdk_win32_get_next_tick (0);
|
||||||
|
@@ -854,9 +854,6 @@ fixup_event (GdkEvent *event)
|
|||||||
(event->any.type == GDK_SELECTION_REQUEST)) &&
|
(event->any.type == GDK_SELECTION_REQUEST)) &&
|
||||||
(event->selection.requestor != NULL))
|
(event->selection.requestor != NULL))
|
||||||
g_object_ref (event->selection.requestor);
|
g_object_ref (event->selection.requestor);
|
||||||
if ((event->any.type == GDK_OWNER_CHANGE) &&
|
|
||||||
(event->owner_change.owner != NULL))
|
|
||||||
g_object_ref (event->owner_change.owner);
|
|
||||||
event->any.send_event = InSendMessage ();
|
event->any.send_event = InSendMessage ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -1002,18 +1002,13 @@ gdk_x11_display_translate_event (GdkEventTranslator *translator,
|
|||||||
|
|
||||||
event->owner_change.type = GDK_OWNER_CHANGE;
|
event->owner_change.type = GDK_OWNER_CHANGE;
|
||||||
event->owner_change.window = window;
|
event->owner_change.window = window;
|
||||||
if (selection_notify->owner != None)
|
|
||||||
event->owner_change.owner = gdk_x11_window_foreign_new_for_display (display,
|
|
||||||
selection_notify->owner);
|
|
||||||
else
|
|
||||||
event->owner_change.owner = NULL;
|
|
||||||
event->owner_change.reason = selection_notify->subtype;
|
event->owner_change.reason = selection_notify->subtype;
|
||||||
event->owner_change.selection =
|
event->owner_change.selection =
|
||||||
gdk_x11_xatom_to_atom_for_display (display,
|
gdk_x11_xatom_to_atom_for_display (display,
|
||||||
selection_notify->selection);
|
selection_notify->selection);
|
||||||
event->owner_change.time = selection_notify->timestamp;
|
event->owner_change.time = selection_notify->timestamp;
|
||||||
event->owner_change.selection_time = selection_notify->selection_timestamp;
|
event->owner_change.selection_time = selection_notify->selection_timestamp;
|
||||||
|
|
||||||
return_val = TRUE;
|
return_val = TRUE;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
#include "gdkinternals.h"
|
#include "gdkinternals.h"
|
||||||
#include "gdkwindow-x11.h"
|
#include "gdkwindow-x11.h"
|
||||||
#include "gdkprivate-x11.h"
|
#include "gdkprivate-x11.h"
|
||||||
|
#include "xsettings-client.h"
|
||||||
|
|
||||||
|
|
||||||
static gboolean gdk_event_source_prepare (GSource *source,
|
static gboolean gdk_event_source_prepare (GSource *source,
|
||||||
@@ -175,6 +176,9 @@ gdk_event_source_translate_event (GdkEventSource *event_source,
|
|||||||
GdkEventTranslator *event_translator;
|
GdkEventTranslator *event_translator;
|
||||||
GdkWindow *filter_window;
|
GdkWindow *filter_window;
|
||||||
Display *dpy;
|
Display *dpy;
|
||||||
|
GdkX11Screen *x11_screen;
|
||||||
|
|
||||||
|
x11_screen = (GdkX11Screen*)gdk_display_get_default_screen (event_source->display);
|
||||||
|
|
||||||
dpy = GDK_DISPLAY_XDISPLAY (event_source->display);
|
dpy = GDK_DISPLAY_XDISPLAY (event_source->display);
|
||||||
|
|
||||||
@@ -191,8 +195,17 @@ gdk_event_source_translate_event (GdkEventSource *event_source,
|
|||||||
if (filter_window)
|
if (filter_window)
|
||||||
event->any.window = g_object_ref (filter_window);
|
event->any.window = g_object_ref (filter_window);
|
||||||
|
|
||||||
|
/* apply XSettings filters */
|
||||||
|
if (xevent->xany.window == XRootWindow (dpy, 0))
|
||||||
|
result = gdk_xsettings_root_window_filter (xevent, event, x11_screen);
|
||||||
|
|
||||||
|
if (result == GDK_FILTER_CONTINUE &&
|
||||||
|
xevent->xany.window == x11_screen->xsettings_manager_window)
|
||||||
|
result = gdk_xsettings_manager_window_filter (xevent, event, x11_screen);
|
||||||
|
|
||||||
/* Run default filters */
|
/* Run default filters */
|
||||||
if (_gdk_default_filters)
|
if (result == GDK_FILTER_CONTINUE &&
|
||||||
|
_gdk_default_filters)
|
||||||
{
|
{
|
||||||
/* Apply global filters */
|
/* Apply global filters */
|
||||||
result = gdk_event_apply_filters (xevent, event, NULL);
|
result = gdk_event_apply_filters (xevent, event, NULL);
|
||||||
|
@@ -59,7 +59,7 @@ struct _GdkX11Screen
|
|||||||
char *window_manager_name;
|
char *window_manager_name;
|
||||||
|
|
||||||
/* X Settings */
|
/* X Settings */
|
||||||
GdkWindow *xsettings_manager_window;
|
Window xsettings_manager_window;
|
||||||
Atom xsettings_selection_atom;
|
Atom xsettings_selection_atom;
|
||||||
GHashTable *xsettings; /* string of GDK settings name => GValue */
|
GHashTable *xsettings; /* string of GDK settings name => GValue */
|
||||||
|
|
||||||
|
@@ -417,14 +417,14 @@ read_settings (GdkX11Screen *x11_screen,
|
|||||||
|
|
||||||
x11_screen->xsettings = NULL;
|
x11_screen->xsettings = NULL;
|
||||||
|
|
||||||
if (x11_screen->xsettings_manager_window)
|
if (x11_screen->xsettings_manager_window != 0)
|
||||||
{
|
{
|
||||||
GdkDisplay *display = x11_screen->display;
|
GdkDisplay *display = x11_screen->display;
|
||||||
Atom xsettings_atom = gdk_x11_get_xatom_by_name_for_display (display, "_XSETTINGS_SETTINGS");
|
Atom xsettings_atom = gdk_x11_get_xatom_by_name_for_display (display, "_XSETTINGS_SETTINGS");
|
||||||
|
|
||||||
gdk_x11_display_error_trap_push (display);
|
gdk_x11_display_error_trap_push (display);
|
||||||
result = XGetWindowProperty (gdk_x11_display_get_xdisplay (display),
|
result = XGetWindowProperty (gdk_x11_display_get_xdisplay (display),
|
||||||
gdk_x11_window_get_xid (x11_screen->xsettings_manager_window),
|
x11_screen->xsettings_manager_window,
|
||||||
xsettings_atom, 0, LONG_MAX,
|
xsettings_atom, 0, LONG_MAX,
|
||||||
False, xsettings_atom,
|
False, xsettings_atom,
|
||||||
&type, &format, &n_items, &bytes_after, &data);
|
&type, &format, &n_items, &bytes_after, &data);
|
||||||
@@ -516,53 +516,33 @@ get_selection_atom (GdkX11Screen *x11_screen)
|
|||||||
return _gdk_x11_get_xatom_for_display_printf (x11_screen->display, "_XSETTINGS_S%d", x11_screen->screen_num);
|
return _gdk_x11_get_xatom_for_display_printf (x11_screen->display, "_XSETTINGS_S%d", x11_screen->screen_num);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkFilterReturn
|
|
||||||
gdk_xsettings_manager_window_filter (GdkXEvent *xevent,
|
|
||||||
GdkEvent *event,
|
|
||||||
gpointer data);
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
check_manager_window (GdkX11Screen *x11_screen,
|
check_manager_window (GdkX11Screen *x11_screen,
|
||||||
gboolean notify_changes)
|
gboolean notify_changes)
|
||||||
{
|
{
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
Display *xdisplay;
|
Display *xdisplay;
|
||||||
Window manager_window_xid;
|
|
||||||
|
|
||||||
display = x11_screen->display;
|
display = x11_screen->display;
|
||||||
xdisplay = gdk_x11_display_get_xdisplay (display);
|
xdisplay = gdk_x11_display_get_xdisplay (display);
|
||||||
|
|
||||||
if (x11_screen->xsettings_manager_window)
|
|
||||||
{
|
|
||||||
gdk_window_remove_filter (x11_screen->xsettings_manager_window, gdk_xsettings_manager_window_filter, x11_screen);
|
|
||||||
g_object_unref (x11_screen->xsettings_manager_window);
|
|
||||||
}
|
|
||||||
|
|
||||||
gdk_x11_display_grab (display);
|
gdk_x11_display_grab (display);
|
||||||
|
|
||||||
manager_window_xid = XGetSelectionOwner (xdisplay, get_selection_atom (x11_screen));
|
x11_screen->xsettings_manager_window = XGetSelectionOwner (xdisplay, get_selection_atom (x11_screen));
|
||||||
x11_screen->xsettings_manager_window = gdk_x11_window_foreign_new_for_display (display,
|
|
||||||
manager_window_xid);
|
if (x11_screen->xsettings_manager_window != 0)
|
||||||
/* XXX: Can't use gdk_window_set_events() here because the first call to this
|
|
||||||
* function happens too early in gdk_init() */
|
|
||||||
if (x11_screen->xsettings_manager_window)
|
|
||||||
XSelectInput (xdisplay,
|
XSelectInput (xdisplay,
|
||||||
gdk_x11_window_get_xid (x11_screen->xsettings_manager_window),
|
x11_screen->xsettings_manager_window,
|
||||||
PropertyChangeMask | StructureNotifyMask);
|
PropertyChangeMask | StructureNotifyMask);
|
||||||
|
|
||||||
gdk_x11_display_ungrab (display);
|
gdk_x11_display_ungrab (display);
|
||||||
|
|
||||||
gdk_display_flush (display);
|
gdk_display_flush (display);
|
||||||
|
|
||||||
if (x11_screen->xsettings_manager_window)
|
|
||||||
{
|
|
||||||
gdk_window_add_filter (x11_screen->xsettings_manager_window, gdk_xsettings_manager_window_filter, x11_screen);
|
|
||||||
}
|
|
||||||
|
|
||||||
read_settings (x11_screen, notify_changes);
|
read_settings (x11_screen, notify_changes);
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkFilterReturn
|
GdkFilterReturn
|
||||||
gdk_xsettings_root_window_filter (GdkXEvent *xevent,
|
gdk_xsettings_root_window_filter (GdkXEvent *xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
@@ -583,11 +563,11 @@ gdk_xsettings_root_window_filter (GdkXEvent *xevent,
|
|||||||
check_manager_window (x11_screen, TRUE);
|
check_manager_window (x11_screen, TRUE);
|
||||||
return GDK_FILTER_REMOVE;
|
return GDK_FILTER_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
static GdkFilterReturn
|
GdkFilterReturn
|
||||||
gdk_xsettings_manager_window_filter (GdkXEvent *xevent,
|
gdk_xsettings_manager_window_filter (GdkXEvent *xevent,
|
||||||
GdkEvent *event,
|
GdkEvent *event,
|
||||||
gpointer data)
|
gpointer data)
|
||||||
@@ -599,22 +579,20 @@ gdk_xsettings_manager_window_filter (GdkXEvent *xevent,
|
|||||||
{
|
{
|
||||||
check_manager_window (x11_screen, TRUE);
|
check_manager_window (x11_screen, TRUE);
|
||||||
/* let GDK do its cleanup */
|
/* let GDK do its cleanup */
|
||||||
return GDK_FILTER_CONTINUE;
|
return GDK_FILTER_CONTINUE;
|
||||||
}
|
}
|
||||||
else if (xev->xany.type == PropertyNotify)
|
else if (xev->xany.type == PropertyNotify)
|
||||||
{
|
{
|
||||||
read_settings (x11_screen, TRUE);
|
read_settings (x11_screen, TRUE);
|
||||||
return GDK_FILTER_REMOVE;
|
return GDK_FILTER_REMOVE;
|
||||||
}
|
}
|
||||||
|
|
||||||
return GDK_FILTER_CONTINUE;;
|
return GDK_FILTER_CONTINUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
_gdk_x11_xsettings_init (GdkX11Screen *x11_screen)
|
_gdk_x11_xsettings_init (GdkX11Screen *x11_screen)
|
||||||
{
|
{
|
||||||
gdk_window_add_filter (gdk_screen_get_root_window (GDK_SCREEN (x11_screen)), gdk_xsettings_root_window_filter, x11_screen);
|
|
||||||
|
|
||||||
check_manager_window (x11_screen, FALSE);
|
check_manager_window (x11_screen, FALSE);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,18 +605,12 @@ _gdk_x11_settings_force_reread (GdkX11Screen *x11_screen)
|
|||||||
void
|
void
|
||||||
_gdk_x11_xsettings_finish (GdkX11Screen *x11_screen)
|
_gdk_x11_xsettings_finish (GdkX11Screen *x11_screen)
|
||||||
{
|
{
|
||||||
gdk_window_remove_filter (gdk_screen_get_root_window (GDK_SCREEN (x11_screen)), gdk_xsettings_root_window_filter, x11_screen);
|
|
||||||
if (x11_screen->xsettings_manager_window)
|
if (x11_screen->xsettings_manager_window)
|
||||||
{
|
x11_screen->xsettings_manager_window = 0;
|
||||||
gdk_window_remove_filter (x11_screen->xsettings_manager_window, gdk_xsettings_manager_window_filter, x11_screen);
|
|
||||||
g_object_unref (x11_screen->xsettings_manager_window);
|
|
||||||
x11_screen->xsettings_manager_window = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (x11_screen->xsettings)
|
if (x11_screen->xsettings)
|
||||||
{
|
{
|
||||||
g_hash_table_unref (x11_screen->xsettings);
|
g_hash_table_unref (x11_screen->xsettings);
|
||||||
x11_screen->xsettings = NULL;
|
x11_screen->xsettings = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -29,4 +29,12 @@ void _gdk_x11_xsettings_init (GdkX11Screen *x11_screen);
|
|||||||
void _gdk_x11_xsettings_finish (GdkX11Screen *x11_screen);
|
void _gdk_x11_xsettings_finish (GdkX11Screen *x11_screen);
|
||||||
void _gdk_x11_settings_force_reread (GdkX11Screen *x11_screen);
|
void _gdk_x11_settings_force_reread (GdkX11Screen *x11_screen);
|
||||||
|
|
||||||
|
GdkFilterReturn gdk_xsettings_root_window_filter (GdkXEvent *xevent,
|
||||||
|
GdkEvent *event,
|
||||||
|
gpointer data);
|
||||||
|
GdkFilterReturn gdk_xsettings_manager_window_filter (GdkXEvent *xevent,
|
||||||
|
GdkEvent *event,
|
||||||
|
gpointer data);
|
||||||
|
|
||||||
|
|
||||||
#endif /* XSETTINGS_CLIENT_H */
|
#endif /* XSETTINGS_CLIENT_H */
|
||||||
|
Reference in New Issue
Block a user