static int gs_grab_get_keyboard (GSGrab *grab, GdkWindow *window, GdkScreen *screen) { GdkGrabStatus status; g_return_val_if_fail (window != NULL, FALSE); g_return_val_if_fail (screen != NULL, FALSE); gs_debug ("Grabbing keyboard widget=%X", (guint32) GDK_WINDOW_XID (window)); status = gdk_keyboard_grab (window, FALSE, GDK_CURRENT_TIME); if (status == GDK_GRAB_SUCCESS) { if (grab->priv->keyboard_grab_window != NULL) { g_object_remove_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window), (gpointer *) &grab->priv->keyboard_grab_window); } grab->priv->keyboard_grab_window = window; g_object_add_weak_pointer (G_OBJECT (grab->priv->keyboard_grab_window), (gpointer *) &grab->priv->keyboard_grab_window); grab->priv->keyboard_grab_screen = screen; } else { gs_debug ("Couldn't grab keyboard! (%s)", grab_string (status)); } return status; }
static void grab_window_toggled (GtkToggleButton *button, GtkWidget *widget) { GdkDevice *device = gtk_get_current_event_device (); if (gdk_device_get_source (device) != GDK_SOURCE_KEYBOARD) device = gdk_device_get_associated_device (device); if (gtk_toggle_button_get_active (button)) { int status; status = gdk_device_grab (device, gtk_widget_get_window (widget), GDK_OWNERSHIP_NONE, FALSE, GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK, NULL, GDK_CURRENT_TIME); if (status != GDK_GRAB_SUCCESS) g_warning ("Could not grab keyboard! (%s)", grab_string (status)); } else { gdk_device_ungrab (device, GDK_CURRENT_TIME); } }
static void grab_window_toggled (GtkToggleButton *button, GtkWidget *widget) { if (gtk_toggle_button_get_active (button)) { int status; status = gdk_keyboard_grab (widget->window, FALSE, GDK_CURRENT_TIME); if (status != GDK_GRAB_SUCCESS) g_warning ("Could not grab keyboard! (%s)", grab_string (status)); } else { gdk_keyboard_ungrab (GDK_CURRENT_TIME); } }
static void grab_window_toggled (GtkToggleButton *button, GtkWidget *widget) { GdkDevice *device = gtk_get_current_event_device (); GdkSeat *seat = gdk_device_get_seat (device); if (gtk_toggle_button_get_active (button)) { int status; status = gdk_seat_grab (seat, gtk_widget_get_window (widget), GDK_SEAT_CAPABILITY_KEYBOARD, FALSE, NULL, NULL, NULL, NULL); if (status != GDK_GRAB_SUCCESS) g_warning ("Could not grab keyboard! (%s)", grab_string (status)); } else { gdk_seat_ungrab (seat); } }
gboolean gs_grab_grab_window (GSGrab *grab, GdkWindow *window, GdkScreen *screen, gboolean hide_cursor) { gboolean mstatus = FALSE; gboolean kstatus = FALSE; int i; int retries = 4; gboolean focus_fuckus = FALSE; /* First, have stuff we control in GNOME un-grab */ request_shell_exit_overview (grab); AGAIN: for (i = 0; i < retries; i++) { kstatus = gs_grab_get_keyboard (grab, window, screen); if (kstatus == GDK_GRAB_SUCCESS) { break; } /* else, wait a second and try to grab again. */ sleep (1); } if (kstatus != GDK_GRAB_SUCCESS) { if (!focus_fuckus) { focus_fuckus = TRUE; gs_grab_nuke_focus (); goto AGAIN; } } for (i = 0; i < retries; i++) { mstatus = gs_grab_get_mouse (grab, window, screen, hide_cursor); if (mstatus == GDK_GRAB_SUCCESS) { break; } /* else, wait a second and try to grab again. */ sleep (1); } if (mstatus != GDK_GRAB_SUCCESS) { gs_debug ("Couldn't grab pointer! (%s)", grab_string (mstatus)); } #if 0 /* FIXME: release the pointer grab so GTK will work */ gs_grab_release_mouse (grab); #endif /* When should we allow blanking to proceed? The current theory is that both a keyboard grab and a mouse grab are mandatory - If we don't have a keyboard grab, then we won't be able to read a password to unlock, so the kbd grab is manditory. - If we don't have a mouse grab, then we might not see mouse clicks as a signal to unblank, on-screen widgets won't work ideally, and gs_grab_move_to_window() will spin forever when it gets called. */ if (kstatus != GDK_GRAB_SUCCESS || mstatus != GDK_GRAB_SUCCESS) { /* Do not blank without a keyboard and mouse grabs. */ /* Release keyboard or mouse which was grabbed. */ if (kstatus == GDK_GRAB_SUCCESS) { gs_grab_release_keyboard (grab); } if (mstatus == GDK_GRAB_SUCCESS) { gs_grab_release_mouse (grab); } return FALSE; } /* Grab is good, go ahead and blank. */ return TRUE; }
static bool cgi_multipart_header_callback(void *p_context, MCMultiPartHeader *p_header) { bool t_success = true; cgi_multipart_context_t *t_context = (cgi_multipart_context_t*)p_context; if (p_header != NULL) { if (MCCStringEqualCaseless(p_header->name, "Content-Disposition")) { if (MCCStringEqualCaseless(p_header->value, "form-data")) t_context->disposition = kMCDispositionFormData; else if (MCCStringEqualCaseless(p_header->value, "file")) t_context->disposition = kMCDispositionFile; else t_context->disposition = kMCDispositionUnknown; for (uint32_t i = 0; i < p_header->param_count; i++) { if (MCCStringEqualCaseless(p_header->param_name[i], "name")) grab_string(t_context->name, p_header->param_value[i]); else if (MCCStringEqualCaseless(p_header->param_name[i], "filename")) grab_string(t_context->file_name, p_header->param_value[i]); } } else if (MCCStringEqualCaseless(p_header->name, "Content-Type")) { grab_string(t_context->type, p_header->value); for (uint32_t i = 0; i < p_header->param_count; i++) { if (MCCStringEqualCaseless(p_header->param_name[i], "boundary")) grab_string(t_context->boundary, p_header->param_value[i]); } } } else { if (cgi_context_is_form_data(t_context)) { MCExecPoint ep; t_success = t_context->name != NULL; if (t_success) { cgi_fetch_variable_value_for_key(s_cgi_post, t_context->name, MCCStringLength(t_context->name), ep, t_context->post_variable); t_context->post_variable->assign_empty(); cgi_fetch_variable_value_for_key(s_cgi_post_binary, t_context->name, MCCStringLength(t_context->name), ep, t_context->post_binary_variable); t_context->post_binary_variable->assign_empty(); } } else if (cgi_context_is_file(t_context)) { const char *t_temp_dir = cgi_get_upload_temp_dir(); const char *t_error = NULL; if (t_temp_dir == NULL || !MCS_exists(t_temp_dir, False)) { t_context->file_status = kMCFileStatusNoUploadFolder; } else if (!MCMultiPartCreateTempFile(cgi_get_upload_temp_dir(), t_context->file_handle, t_context->temp_name)) { t_context->file_status = kMCFileStatusIOError; } } } return t_success; }