static void refcounted_grab_server (Display *xdisplay) { GdkDisplay *display = gdk_x11_lookup_xdisplay (xdisplay); gdk_x11_display_grab (display); }
/** * mate_rr_screen_refresh * @screen: a #MateRRScreen * @error: location to store error, or %NULL * * Refreshes the screen configuration, and calls the screen's callback if it * exists and if the screen's configuration changed. * * Return value: TRUE if the screen's configuration changed; otherwise, the * function returns FALSE and a NULL error if the configuration didn't change, * or FALSE and a non-NULL error if there was an error while refreshing the * configuration. */ gboolean mate_rr_screen_refresh (MateRRScreen *screen, GError **error) { gboolean refreshed; g_return_val_if_fail (error == NULL || *error == NULL, FALSE); gdk_x11_display_grab (gdk_screen_get_display (screen->gdk_screen)); refreshed = screen_update (screen, FALSE, TRUE, error); force_timestamp_update (screen); /* this is to keep other clients from thinking that the X server re-detected things by itself - bgo#621046 */ gdk_x11_display_ungrab (gdk_screen_get_display (screen->gdk_screen)); return refreshed; }
/** * gnome_rr_screen_refresh: * @screen: a #GnomeRRScreen * @error: location to store error, or %NULL * * Refreshes the screen configuration, and calls the screen's callback if it * exists and if the screen's configuration changed. * * Return value: TRUE if the screen's configuration changed; otherwise, the * function returns FALSE and a NULL error if the configuration didn't change, * or FALSE and a non-NULL error if there was an error while refreshing the * configuration. */ gboolean gnome_rr_screen_refresh (GnomeRRScreen *screen, GError **error) { gboolean refreshed; g_return_val_if_fail (error == NULL || *error == NULL, FALSE); #ifdef HAVE_X11 gdk_x11_display_grab (gdk_screen_get_display (screen->priv->gdk_screen)); #endif refreshed = screen_update (screen, FALSE, TRUE, error); #ifdef HAVE_X11 gnome_rr_x11_screen_force_timestamp_update (GNOME_RR_X11_SCREEN (screen)); /* this is to keep other clients from thinking that the X server re-detected things by itself - bgo#621046 */ gdk_x11_display_ungrab (gdk_screen_get_display (screen->priv->gdk_screen)); #endif return refreshed; }
static void check_manager_window (GdkX11Screen *x11_screen, gboolean notify_changes) { GdkDisplay *display; Display *xdisplay; Window manager_window_xid; display = x11_screen->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); manager_window_xid = XGetSelectionOwner (xdisplay, get_selection_atom (x11_screen)); x11_screen->xsettings_manager_window = gdk_x11_window_foreign_new_for_display (display, manager_window_xid); /* 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, gdk_x11_window_get_xid (x11_screen->xsettings_manager_window), PropertyChangeMask | StructureNotifyMask); gdk_x11_display_ungrab (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); }
static gboolean crtc_assignment_apply (CrtcAssignment *assign, guint32 timestamp, GError **error) { MateRRCrtc **all_crtcs = mate_rr_screen_list_crtcs (assign->screen); int width, height; int i; int min_width, max_width, min_height, max_height; int width_mm, height_mm; gboolean success = TRUE; /* Compute size of the screen */ get_required_virtual_size (assign, &width, &height); mate_rr_screen_get_ranges ( assign->screen, &min_width, &max_width, &min_height, &max_height); /* We should never get here if the dimensions don't fit in the virtual size, * but just in case we do, fix it up. */ width = MAX (min_width, width); width = MIN (max_width, width); height = MAX (min_height, height); height = MIN (max_height, height); /* FMQ: do we need to check the sizes instead of clamping them? */ /* Grab the server while we fiddle with the CRTCs and the screen, so that * apps that listen for RANDR notifications will only receive the final * status. */ gdk_x11_display_grab (gdk_screen_get_display (assign->screen->gdk_screen)); /* Turn off all crtcs that are currently displaying outside the new screen, * or are not used in the new setup */ for (i = 0; all_crtcs[i] != NULL; ++i) { MateRRCrtc *crtc = all_crtcs[i]; MateRRMode *mode = mate_rr_crtc_get_current_mode (crtc); int x, y; if (mode) { int w, h; mate_rr_crtc_get_position (crtc, &x, &y); w = mate_rr_mode_get_width (mode); h = mate_rr_mode_get_height (mode); if (crtc_is_rotated (crtc)) { int tmp = h; h = w; w = tmp; } if (x + w > width || y + h > height || !g_hash_table_lookup (assign->info, crtc)) { if (!mate_rr_crtc_set_config_with_time (crtc, timestamp, 0, 0, NULL, MATE_RR_ROTATION_0, NULL, 0, error)) { success = FALSE; break; } } } } /* The 'physical size' of an X screen is meaningless if that screen * can consist of many monitors. So just pick a size that make the * dpi 96. * * Firefox and Evince apparently believe what X tells them. */ width_mm = (width / 96.0) * 25.4 + 0.5; height_mm = (height / 96.0) * 25.4 + 0.5; if (success) { ConfigureCrtcState state; mate_rr_screen_set_size (assign->screen, width, height, width_mm, height_mm); state.timestamp = timestamp; state.has_error = FALSE; state.error = error; g_hash_table_foreach (assign->info, configure_crtc, &state); success = !state.has_error; } mate_rr_screen_set_primary_output (assign->screen, assign->primary); gdk_x11_display_ungrab (gdk_screen_get_display (assign->screen->gdk_screen)); return success; }
static gchar* passphrase_mbox(const gchar *uid_hint, const gchar *pass_hint, gint prev_bad) { gchar *the_passphrase = NULL; GtkWidget *vbox; GtkWidget *confirm_box; GtkWidget *window; GtkWidget *pass_entry; GtkWidget *ok_button; GtkWidget *cancel_button; window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(window), _("Passphrase")); gtk_widget_set_size_request(window, 450, -1); gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER); gtk_window_set_modal(GTK_WINDOW(window), TRUE); gtk_window_set_policy(GTK_WINDOW(window), FALSE, FALSE, FALSE); g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(passphrase_deleted), NULL); g_signal_connect(G_OBJECT(window), "key_press_event", G_CALLBACK(passphrase_key_pressed), NULL); MANAGE_WINDOW_SIGNALS_CONNECT(window); manage_window_set_transient(GTK_WINDOW(window)); vbox = gtk_vbox_new(FALSE, 8); gtk_container_add(GTK_CONTAINER(window), vbox); gtk_container_set_border_width(GTK_CONTAINER(vbox), 8); if (uid_hint || pass_hint) { GtkWidget *label; label = create_description (uid_hint, pass_hint, prev_bad); gtk_box_pack_start (GTK_BOX(vbox), label, FALSE, FALSE, 0); } pass_entry = gtk_entry_new(); gtk_box_pack_start(GTK_BOX(vbox), pass_entry, FALSE, FALSE, 0); gtk_entry_set_visibility(GTK_ENTRY(pass_entry), FALSE); gtk_widget_grab_focus(pass_entry); gtkut_stock_button_set_create(&confirm_box, &ok_button, GTK_STOCK_OK, &cancel_button, GTK_STOCK_CANCEL, NULL, NULL); gtk_box_pack_end(GTK_BOX(vbox), confirm_box, FALSE, FALSE, 0); gtk_widget_grab_default(ok_button); g_signal_connect(G_OBJECT(ok_button), "clicked", G_CALLBACK(passphrase_ok_cb), NULL); g_signal_connect(G_OBJECT(pass_entry), "activate", G_CALLBACK(passphrase_ok_cb), NULL); g_signal_connect(G_OBJECT(cancel_button), "clicked", G_CALLBACK(passphrase_cancel_cb), NULL); gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER); if (grab_all) gtk_window_set_policy (GTK_WINDOW(window), FALSE, FALSE, TRUE); gtk_widget_show_all(window); if (grab_all) { /* make sure that window is viewable * FIXME: this is still not enough */ gtk_widget_show_now(window); gdk_flush(); #ifdef GDK_WINDOWING_X11 gdk_x11_display_grab(gdk_display_get_default()); #endif /* GDK_WINDOWING_X11 */ if (gdk_pointer_grab(window->window, TRUE, 0, window->window, NULL, GDK_CURRENT_TIME)) { #ifdef GDK_WINDOWING_X11 gdk_x11_display_ungrab(gdk_display_get_default()); #endif /* GDK_WINDOWING_X11 */ g_warning("OOPS: Could not grab mouse\n"); gtk_widget_destroy(window); return NULL; } if (gdk_keyboard_grab(window->window, FALSE, GDK_CURRENT_TIME)) { gdk_display_pointer_ungrab(gdk_display_get_default(), GDK_CURRENT_TIME); #ifdef GDK_WINDOWING_X11 gdk_x11_display_ungrab(gdk_display_get_default()); #endif /* GDK_WINDOWING_X11 */ g_warning("OOPS: Could not grab keyboard\n"); gtk_widget_destroy(window); return NULL; } } gtk_main(); if (grab_all) { gdk_display_keyboard_ungrab(gdk_display_get_default(), GDK_CURRENT_TIME); gdk_display_pointer_ungrab(gdk_display_get_default(), GDK_CURRENT_TIME); #ifdef GDK_WINDOWING_X11 gdk_x11_display_ungrab(gdk_display_get_default()); #endif /* GDK_WINDOWING_X11 */ gdk_flush(); } manage_window_focus_out(window, NULL, NULL); if (pass_ack) { const gchar *entry_text; entry_text = gtk_entry_get_text(GTK_ENTRY(pass_entry)); the_passphrase = g_locale_from_utf8(entry_text, -1, NULL, NULL, NULL); if (!the_passphrase) the_passphrase = g_strdup(entry_text); } gtk_widget_destroy(window); return the_passphrase; }
static VALUE rg_grab(VALUE self) { gdk_x11_display_grab(_SELF(self)); return self; }
/** * gdk_x11_grab_server: * * Call gdk_x11_display_grab() on the default display. * To ungrab the server again, use gdk_x11_ungrab_server(). * * gdk_x11_grab_server()/gdk_x11_ungrab_server() calls can be nested. **/ void gdk_x11_grab_server (void) { gdk_x11_display_grab (gdk_display_get_default ()); }