/* This is called when the grab is broken for * either the dock, or the scale itself */ static void gtk_scale_button_grab_notify (GtkScaleButton *button, gboolean was_grabbed) { GdkDisplay *display; GtkScaleButtonPrivate *priv; if (was_grabbed != FALSE) return; priv = button->priv; if (!GTK_WIDGET_HAS_GRAB (priv->dock)) return; if (gtk_widget_is_ancestor (gtk_grab_get_current (), priv->dock)) return; display = gtk_widget_get_display (priv->dock); gdk_display_keyboard_ungrab (display, GDK_CURRENT_TIME); gdk_display_pointer_ungrab (display, GDK_CURRENT_TIME); gtk_grab_remove (priv->dock); /* hide again */ gtk_widget_hide (priv->dock); priv->timeout = FALSE; }
void XAP_UnixDialog_FileOpenSaveAs::onDeleteCancel() { if (m_FC != NULL && GTK_WIDGET_HAS_GRAB(GTK_WIDGET (m_FC))) { gtk_grab_remove (GTK_WIDGET (m_FC)); } m_FC = NULL; m_answer = a_CANCEL; }
static gint gtk_combo_button_release (GtkWidget * widget, GdkEvent * event, GtkCombo * combo) { GtkWidget *child; if ((combo->current_button != 0) && (event->button.button == 1)) { /* This was the initial button press */ GdkEventCrossing tmp_event; combo->current_button = 0; if (widget != combo->button) gtk_widget_event (combo->button, event); /* Un-pre-hightlight */ tmp_event.type = GDK_LEAVE_NOTIFY; tmp_event.window = combo->button->window; tmp_event.send_event = TRUE; tmp_event.subwindow = NULL; tmp_event.detail = GDK_NOTIFY_ANCESTOR; gtk_widget_event (combo->button, (GdkEvent *)&tmp_event); /* Check to see if we released inside the button */ child = gtk_get_event_widget ((GdkEvent*) event); while (child && child != (combo->button)) child = child->parent; if (child == combo->button) { gtk_grab_add (combo->popwin); gdk_pointer_grab (combo->popwin->window, TRUE, GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK, NULL, NULL, GDK_CURRENT_TIME); return FALSE; } } else { /* The user has clicked inside the popwin and released */ if (GTK_WIDGET_HAS_GRAB (combo->popwin)) { gtk_grab_remove (combo->popwin); gdk_pointer_ungrab (event->button.time); } } gtk_widget_hide (combo->popwin); return TRUE; }
static int gtk_combo_list_key_press (GtkWidget * widget, GdkEventKey * event, GtkCombo * combo) { if (event->keyval == GDK_Escape) { if (GTK_WIDGET_HAS_GRAB (combo->popwin)) { gtk_grab_remove (combo->popwin); gdk_pointer_ungrab (GDK_CURRENT_TIME); } else if (GTK_WIDGET_HAS_GRAB (combo->list)) gtk_list_end_drag_selection (GTK_LIST (combo->list)); gtk_widget_hide (combo->popwin); if (GTK_WIDGET_HAS_GRAB (combo->button)) { combo->current_button = 0; GTK_BUTTON (combo->button)->in_button = FALSE; gtk_button_released (GTK_BUTTON (combo->button)); gtk_grab_remove (combo->button); } return TRUE; } return FALSE; }
static gint gtk_combo_list_enter (GtkWidget *widget, GdkEventCrossing *event, GtkCombo *combo) { GtkWidget *event_widget; event_widget = gtk_get_event_widget ((GdkEvent*) event); if ((event_widget == combo->list) && (combo->current_button != 0) && (!GTK_WIDGET_HAS_GRAB (combo->list))) { GdkEvent tmp_event; gint x, y; GdkModifierType mask; gtk_grab_remove (combo->popwin); /* Transfer the grab over to the list by synthesizing * a button press event */ gdk_window_get_pointer (combo->list->window, &x, &y, &mask); tmp_event.button.type = GDK_BUTTON_PRESS; tmp_event.button.window = combo->list->window; tmp_event.button.send_event = TRUE; tmp_event.button.time = GDK_CURRENT_TIME; /* bad */ tmp_event.button.x = x; tmp_event.button.y = y; /* We leave all the XInput fields unfilled here, in the expectation * that GtkList doesn't care. */ tmp_event.button.button = combo->current_button; tmp_event.button.state = mask; gtk_widget_event (combo->list, &tmp_event); } return FALSE; }
static void mimeview_selected(GtkCTree *ctree, GtkCTreeNode *node, gint column, MimeView *mimeview) { MimeInfo *partinfo; if (mimeview->opened == node) return; mimeview->opened = node; gtk_ctree_node_moveto(ctree, node, -1, 0.5, 0); partinfo = gtk_ctree_node_get_row_data(ctree, node); if (!partinfo) return; /* ungrab the mouse event */ if (GTK_WIDGET_HAS_GRAB(ctree)) { gtk_grab_remove(GTK_WIDGET(ctree)); if (gdk_pointer_is_grabbed()) gdk_pointer_ungrab(GDK_CURRENT_TIME); } mimeview->textview->default_text = FALSE; update_signature_info(mimeview, partinfo); if (!mimeview_show_part(mimeview, partinfo)) { switch (partinfo->type) { case MIMETYPE_TEXT: case MIMETYPE_MESSAGE: case MIMETYPE_MULTIPART: mimeview_show_message_part(mimeview, partinfo); break; default: mimeview->textview->default_text = TRUE; mimeview_change_view_type(mimeview, MIMEVIEW_TEXT); textview_show_mime_part(mimeview->textview, partinfo); break; } } }
void wxListBox::DoScrollToCell(int n, float alignY, float alignX) { wxCHECK_RET( m_treeview, wxT("invalid listbox") ); wxCHECK_RET( IsValid(n), wxT("invalid index")); //RN: I have no idea why this line is needed... if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (m_treeview)) return; GtkTreeIter iter; if ( !GTKGetIteratorFor(n, &iter) ) return; GtkTreePath* path = gtk_tree_model_get_path( GTK_TREE_MODEL(m_liststore), &iter); // Scroll to the desired cell (0.0 == topleft alignment) gtk_tree_view_scroll_to_cell(m_treeview, path, NULL, TRUE, alignY, alignX); gtk_tree_path_free(path); }
void wxListBox::DoSetFirstItem( int n ) { wxCHECK_RET( m_list, wxT("invalid listbox") ); if (gdk_pointer_is_grabbed () && GTK_WIDGET_HAS_GRAB (m_list)) return; // terribly efficient const gchar *vadjustment_key = "gtk-vadjustment"; guint vadjustment_key_id = g_quark_from_static_string (vadjustment_key); GtkAdjustment *adjustment = (GtkAdjustment*) gtk_object_get_data_by_id (GTK_OBJECT (m_list), vadjustment_key_id); wxCHECK_RET( adjustment, wxT("invalid listbox code") ); GList *target = g_list_nth( m_list->children, n ); wxCHECK_RET( target, wxT("invalid listbox index") ); GtkWidget *item = GTK_WIDGET(target->data); wxCHECK_RET( item, wxT("invalid listbox code") ); if (item->allocation.y == -1) { wxlistbox_idle_struct* data = new wxlistbox_idle_struct; data->m_listbox = this; data->m_item = n; data->m_tag = gtk_idle_add_priority( 800, wxlistbox_idle_callback, (gpointer) data ); return; } float y = item->allocation.y; if (y > adjustment->upper - adjustment->page_size) y = adjustment->upper - adjustment->page_size; gtk_adjustment_set_value( adjustment, y ); }
static gboolean gail_focus_watcher (GSignalInvocationHint *ihint, guint n_param_values, const GValue *param_values, gpointer data) { GObject *object; GtkWidget *widget; GdkEvent *event; object = g_value_get_object (param_values + 0); g_return_val_if_fail (GTK_IS_WIDGET(object), FALSE); event = g_value_get_boxed (param_values + 1); widget = GTK_WIDGET (object); if (event->type == GDK_FOCUS_CHANGE) { if (event->focus_change.in) { if (GTK_IS_WINDOW (widget)) { GtkWindow *window; window = GTK_WINDOW (widget); if (window->focus_widget) { /* * If we already have a potential focus widget set this * windows's focus widget to focus_before_menu so that * it will be reported when menu item is unset. */ if (next_focus_widget) { if (GTK_IS_MENU_ITEM (next_focus_widget) && !focus_before_menu) { void *vp_focus_before_menu = &focus_before_menu; focus_before_menu = window->focus_widget; g_object_add_weak_pointer (G_OBJECT (focus_before_menu), vp_focus_before_menu); } return TRUE; } widget = window->focus_widget; } else if (window->type == GTK_WINDOW_POPUP) { if (GTK_IS_BIN (widget)) { GtkWidget *child = gtk_bin_get_child (GTK_BIN (widget)); if (GTK_IS_WIDGET (child) && GTK_WIDGET_HAS_GRAB (child)) { if (GTK_IS_MENU_SHELL (child)) { if (GTK_MENU_SHELL (child)->active_menu_item) { /* * We have a menu which has a menu item selected * so we do not report focus on the menu. */ return TRUE; } } widget = child; } } else /* popup window has no children; this edge case occurs in some custom code (OOo for instance) */ { return TRUE; } } else /* Widget is a non-popup toplevel with no focus children; don't emit for this case either, as it's useless */ { return TRUE; } } } else { if (next_focus_widget) { GtkWidget *toplevel; toplevel = gtk_widget_get_toplevel (next_focus_widget); if (toplevel == widget) next_focus_widget = NULL; } /* focus out */ widget = NULL; } } else { if (event->type == GDK_MOTION_NOTIFY && GTK_WIDGET_HAS_FOCUS (widget)) { if (widget == focus_widget) { return TRUE; } } else { return TRUE; } } /* * If the focus widget is a GtkSocket without a plug * then ignore the focus notification as the embedded * plug will report a focus notification. */ if (GTK_IS_SOCKET (widget) && GTK_SOCKET (widget)->plug_widget == NULL) return TRUE; /* * The widget may not yet be visible on the screen so we wait until it is. */ gail_focus_notify_when_idle (widget); return TRUE; }