}
/**
- * gdk_x11_screen_get_monitor_output:
+ * gdk_x11_screen_get_monitor_output: (skip)
* @screen: a #GdkScreen
* @monitor_num: number of the monitor, between 0 and gdk_screen_get_n_monitors (screen)
*
{
GdkX11Screen *x11_screen = GDK_X11_SCREEN (screen);
gint n_monitors;
+ gint primary_monitor;
GdkX11Monitor *monitors;
gboolean changed;
+ primary_monitor = x11_screen->primary_monitor;
n_monitors = x11_screen->n_monitors;
monitors = x11_screen->monitors;
init_multihead (screen);
- changed = !compare_monitors (monitors, n_monitors,
- x11_screen->monitors, x11_screen->n_monitors);
+ changed =
+ !compare_monitors (monitors, n_monitors,
+ x11_screen->monitors, x11_screen->n_monitors) ||
+ x11_screen->primary_monitor != primary_monitor;
+
free_monitors (monitors, n_monitors);
display_x11 = GDK_X11_DISPLAY (gdk_screen_get_display (screen));
if (display_x11->have_randr13 && event->type == ConfigureNotify)
- {
- g_signal_emit_by_name (screen, "monitors-changed");
- return;
- }
+ return;
XRRUpdateConfiguration (event);
#else
{
if ((type_return == XA_WINDOW) && (format_return == 32) && (data))
{
- GdkNativeWindow window = *(GdkNativeWindow *) data;
+ Window window = *(Window *) data;
if (window != None)
{
ret = gdk_x11_window_foreign_new_for_display (x11_screen->display,
- *(Window *) data);
+ window);
}
}
}
return ret;
}
-/* Sends a ClientMessage to all toplevel client windows */
-static gboolean
-gdk_event_send_client_message_to_all_recurse (GdkDisplay *display,
- XEvent *xev,
- guint32 xid,
- guint level)
-{
- Atom type = None;
- int format;
- unsigned long nitems, after;
- unsigned char *data;
- Window *ret_children, ret_root, ret_parent;
- unsigned int ret_nchildren;
- gboolean send = FALSE;
- gboolean found = FALSE;
- gboolean result = FALSE;
- int i;
-
- gdk_x11_display_error_trap_push (display);
-
- if (XGetWindowProperty (GDK_DISPLAY_XDISPLAY (display), xid,
- gdk_x11_get_xatom_by_name_for_display (display, "WM_STATE"),
- 0, 0, False, AnyPropertyType,
- &type, &format, &nitems, &after, &data) != Success)
- goto out;
-
- if (type)
- {
- send = TRUE;
- XFree (data);
- }
- else
- {
- /* OK, we're all set, now let's find some windows to send this to */
- if (!XQueryTree (GDK_DISPLAY_XDISPLAY (display), xid,
- &ret_root, &ret_parent,
- &ret_children, &ret_nchildren))
- goto out;
-
- for(i = 0; i < ret_nchildren; i++)
- if (gdk_event_send_client_message_to_all_recurse (display, xev, ret_children[i], level + 1))
- found = TRUE;
-
- XFree (ret_children);
- }
-
- if (send || (!found && (level == 1)))
- {
- xev->xclient.window = xid;
- _gdk_x11_display_send_xevent (display, xid, False, NoEventMask, xev);
- }
-
- result = send || found;
-
- out:
- gdk_x11_display_error_trap_pop_ignored (display);
-
- return result;
-}
-
-static void
-gdk_x11_screen_broadcast_client_message (GdkScreen *screen,
- GdkEvent *event)
-{
- XEvent sev;
- GdkWindow *root_window;
-
- g_return_if_fail (event != NULL);
-
- root_window = gdk_screen_get_root_window (screen);
-
- /* Set up our event to send, with the exception of its target window */
- sev.xclient.type = ClientMessage;
- sev.xclient.display = GDK_WINDOW_XDISPLAY (root_window);
- sev.xclient.format = event->client.data_format;
- memcpy(&sev.xclient.data, &event->client.data, sizeof (sev.xclient.data));
- sev.xclient.message_type =
- gdk_x11_atom_to_xatom_for_display (GDK_WINDOW_DISPLAY (root_window),
- event->client.message_type);
-
- gdk_event_send_client_message_to_all_recurse (gdk_screen_get_display (screen),
- &sev,
- GDK_WINDOW_XID (root_window),
- 0);
-}
-
static gboolean
check_transform (const gchar *xsettings_name,
GType src_type,
screen_class->make_display_name = gdk_x11_screen_make_display_name;
screen_class->get_active_window = gdk_x11_screen_get_active_window;
screen_class->get_window_stack = gdk_x11_screen_get_window_stack;
- screen_class->broadcast_client_message = gdk_x11_screen_broadcast_client_message;
screen_class->get_setting = gdk_x11_screen_get_setting;
screen_class->visual_get_best_depth = _gdk_x11_screen_visual_get_best_depth;
screen_class->visual_get_best_type = _gdk_x11_screen_visual_get_best_type;