static gboolean gnc_plugin_page_invoice_focus (InvoiceWindow *iw) { GtkWidget *regWidget = gnc_invoice_get_register(iw); GtkWidget *notes = gnc_invoice_get_notes(iw); GnucashSheet *sheet; if (!GNUCASH_IS_REGISTER(regWidget)) return FALSE; sheet = gnucash_register_get_sheet (GNUCASH_REGISTER(regWidget)); // Test for the sheet being read only if (!gnucash_sheet_is_read_only (sheet)) { if (!gtk_widget_is_focus (GTK_WIDGET(sheet))) gtk_widget_grab_focus (GTK_WIDGET(sheet)); } else // set focus to the notes field { if (!gtk_widget_is_focus (GTK_WIDGET(notes))) gtk_widget_grab_focus (GTK_WIDGET(notes)); } return FALSE; }
static void store_selected(GtkWidget *choose_bt, gpointer name) { interface_t device; guint i; for (i = 0; i < global_capture_opts.all_ifaces->len; i++) { device = g_array_index(global_capture_opts.all_ifaces, interface_t, i); if (strcmp((char *)name, device.if_info.name) == 0) { if (!device.locked) { device.selected ^= 1; if (device.selected) { global_capture_opts.num_selected++; } else { global_capture_opts.num_selected--; } global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); g_array_insert_val(global_capture_opts.all_ifaces, i, device); if (gtk_widget_is_focus(choose_bt) && get_welcome_window()) { change_interface_selection(device.name, device.selected); } if (gtk_widget_is_focus(choose_bt) && capture_dlg_window_present()) { enable_selected_interface(device.name, device.selected); } device.locked = FALSE; global_capture_opts.all_ifaces = g_array_remove_index(global_capture_opts.all_ifaces, i); g_array_insert_val(global_capture_opts.all_ifaces, i, device); } break; } } if (cap_if_w) { gtk_widget_set_sensitive(capture_bt, !gbl_capture_in_progress && (global_capture_opts.num_selected > 0)); } }
static GdkFilterReturn event_filter (XEvent *xevent, GdkEvent *event, gpointer data) { if (xevent->type == PropertyNotify) { Atom atom = xevent->xproperty.atom; Window win = xevent->xproperty.window; if (win == gdk_x11_get_default_root_xwindow ()) { if (atom == a_NET_CLIENT_LIST) { int focus_on = 0; if (filtered_size && filtered_boxes) { for (int i = 0; i < filtered_size; i++) if (gtk_widget_is_focus (filtered_boxes [i])) { focus_on = i; break; } } else { for (int i = 0; i < wsize; i++) if (gtk_widget_is_focus (boxes [i])) { focus_on = i; break; } } update_box_list (); if (strlen (mosaic_search_box_get_text (MOSAIC_SEARCH_BOX (search)))) { refilter (MOSAIC_SEARCH_BOX (search), NULL); draw_mosaic (GTK_LAYOUT (layout), filtered_boxes, filtered_size, focus_on, options.box_width, options.box_height); } else { draw_mosaic (GTK_LAYOUT (layout), boxes, wsize, focus_on, options.box_width, options.box_height); } } } else { if (atom == a_WM_NAME || atom == a_NET_WM_NAME || atom == a_NET_WM_VISIBLE_NAME) { // Search for appropriate widget to change label. for (int i = 0; i < wsize; i++) if (wins [i] == win) { mosaic_window_box_update_xwindow_name (MOSAIC_WINDOW_BOX (boxes[i])); break; } } if (atom == a_NET_WM_ICON && options.show_icons) { // Search for appropriate widget to update icon. for (int i = 0; i < wsize; i++) if (wins [i] == win) { mosaic_window_box_setup_icon_from_wm (MOSAIC_WINDOW_BOX (boxes[i]), options.icon_size, options.icon_size); break; } } } } return GDK_FILTER_CONTINUE; }
void sc_focus_inputbar(Browser *b, const Arg *arg) { char *data, *clipboard_text; if (arg->data) { if (arg->n == APPEND_URL) { asprintf(&data, "%s%s", arg->data, webkit_web_view_get_uri(b->UI.view)); } else { data = strdup(arg->data); } browser_notify(b, DEFAULT, data); free(data); /* save primary selection - will be overwritten on grab_focus */ clipboard_text = gtk_clipboard_wait_for_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY)); gtk_widget_grab_focus(GTK_WIDGET(b->UI.inputbar)); gtk_editable_set_position(GTK_EDITABLE(b->UI.inputbar), -1); if (clipboard_text) { /* restore primary selection */ gtk_clipboard_set_text(gtk_clipboard_get(GDK_SELECTION_PRIMARY), clipboard_text, -1); free(clipboard_text); } } else if (!gtk_widget_is_focus(GTK_WIDGET(b->UI.inputbar))) { gtk_widget_grab_focus(GTK_WIDGET(b->UI.inputbar)); } if (!gtk_widget_get_visible(GTK_WIDGET(b->UI.inputbar))) { gtk_widget_show(GTK_WIDGET(b->UI.inputbar)); } }
void hover_web_view(WebKitWebView *web_view, WebKitHitTestResult *ht, guint modifiers, gpointer data) { struct Client *c = (struct Client *)data; if (!gtk_widget_is_focus(c->location)) { if (webkit_hit_test_result_context_is_link(ht)) { gtk_entry_set_text(GTK_ENTRY(c->location), webkit_hit_test_result_get_link_uri(ht)); if (c->hover_uri != NULL) g_free(c->hover_uri); c->hover_uri = g_strdup(webkit_hit_test_result_get_link_uri(ht)); } else { gtk_entry_set_text(GTK_ENTRY(c->location), webkit_web_view_get_uri(WEBKIT_WEB_VIEW(c->web_view))); if (c->hover_uri != NULL) g_free(c->hover_uri); c->hover_uri = NULL; } } }
static void show_input_sources_for_locale (GtkWidget *chooser, LocaleInfo *info) { CcInputChooserPrivate *priv = GET_PRIVATE (chooser); set_fixed_size (chooser); remove_all_children (GTK_CONTAINER (priv->list)); if (!info->back_row) { info->back_row = g_object_ref_sink (back_row_new (info->name)); g_object_set_data (G_OBJECT (info->back_row), "back", GINT_TO_POINTER (TRUE)); g_object_set_data (G_OBJECT (info->back_row), "locale-info", info); } gtk_container_add (GTK_CONTAINER (priv->list), GTK_WIDGET (info->back_row)); add_input_source_rows_for_locale (chooser, info); gtk_widget_show_all (priv->list); gtk_adjustment_set_value (priv->adjustment, gtk_adjustment_get_lower (priv->adjustment)); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->list), cc_list_box_update_header_func, NULL, NULL); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); gtk_list_box_set_selection_mode (GTK_LIST_BOX (priv->list), GTK_SELECTION_SINGLE); gtk_list_box_set_activate_on_single_click (GTK_LIST_BOX (priv->list), FALSE); gtk_list_box_unselect_all (GTK_LIST_BOX (priv->list)); if (gtk_widget_is_visible (priv->filter_entry) && !gtk_widget_is_focus (priv->filter_entry)) gtk_widget_grab_focus (priv->filter_entry); }
static gboolean gtk_expander_focus (GtkWidget *widget, GtkDirectionType direction) { GtkExpander *expander = GTK_EXPANDER (widget); if (!focus_current_site (expander, direction)) { GtkWidget *old_focus_child; gboolean widget_is_focus; FocusSite site = FOCUS_NONE; widget_is_focus = gtk_widget_is_focus (widget); old_focus_child = GTK_CONTAINER (widget)->focus_child; if (old_focus_child && old_focus_child == expander->priv->label_widget) site = FOCUS_LABEL; else if (old_focus_child) site = FOCUS_CHILD; else if (widget_is_focus) site = FOCUS_WIDGET; while ((site = get_next_site (expander, site, direction)) != FOCUS_NONE) { if (focus_in_site (expander, site, direction)) return TRUE; } return FALSE; } return TRUE; }
static void maybe_check_submenu_state (GtkMenuItem *menu_item, ThemeMatchData *match_data) { /* Distinguish between active and passive focus, depending on whether the * focus is in submenu. * * Active focus: * function = BOX * state = PRELIGHT * * Passive focus: * function = BOX * state = SELECTED */ if (menu_item->submenu) { GtkWidget *sub_item; sub_item = GTK_MENU_SHELL (menu_item->submenu)->active_menu_item; if (sub_item && gtk_widget_get_state (sub_item) != GTK_STATE_NORMAL) match_data->state = GTK_STATE_SELECTED; } /* This is a hack to cover the cases where a menu item is being * used outside the usual a GtkMenu. More specificaly, this covers * menu items inside the hildon-desktop custom menu widget. */ if (!GTK_IS_MENU (GTK_WIDGET (menu_item)->parent) && !gtk_widget_is_focus (GTK_WIDGET (menu_item)) && gtk_widget_get_state (GTK_WIDGET (menu_item)) != GTK_STATE_NORMAL) match_data->state = GTK_STATE_SELECTED; }
static void column_clicked(GtkTreeViewColumn *column, gpointer user_data) { GtkTreeView *tree_view = GTK_TREE_VIEW(user_data); GtkTreeModel *model; gint column_id; gint cur_id; GtkSortType order; GtkTreeViewColumn *cur_column; GtkTreeViewColumn *button; if (gtk_widget_is_focus(GTK_WIDGET(tree_view)) == FALSE) { gtk_widget_grab_focus(GTK_WIDGET(tree_view)); } column_id = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(column), "column_id")); model = gtk_tree_view_get_model(tree_view); /* 現在のソート列と同じときは昇順/降順を反転する、違うときはクリックした列で昇順ソートする */ if (gtk_tree_sortable_get_sort_column_id(GTK_TREE_SORTABLE(model), &cur_id, &order) == TRUE) { if (cur_id == column_id) { order = (order == GTK_SORT_ASCENDING) ? GTK_SORT_DESCENDING : GTK_SORT_ASCENDING; } else { order = GTK_SORT_ASCENDING; } cur_column = gtk_tree_view_get_column(tree_view, cur_id); gtk_tree_view_column_set_sort_indicator(cur_column, FALSE); } else { order = GTK_SORT_ASCENDING; } gtk_tree_view_column_set_sort_order(column, order); gtk_tree_view_column_set_sort_indicator(column, TRUE); gtk_tree_sortable_set_sort_column_id(GTK_TREE_SORTABLE(model), column_id, order); }
static bool childrenUseEvent(GtkWidget *widget, GdkEventButton *event, bool inNoteBook) { // accept, by default bool usable = true; // get children and check GList *children = gtk_container_get_children(GTK_CONTAINER(widget)); for (GList *child = children;child && usable;child = g_list_next(child)) { // cast child to GtkWidget if (GTK_IS_WIDGET(child->data)) { GtkWidget *childWidget = GTK_WIDGET(child->data); GdkWindow *window = nullptr; // check widget state and type if (gtk_widget_get_state(childWidget) == GTK_STATE_PRELIGHT) { // if widget is prelight, we don't need to check where event // happen, any prelight widget indicate we can't do a move usable = false; continue; } window = gtk_widget_get_window(childWidget); if (!(window && gdk_window_is_visible(window))) continue; if (GTK_IS_NOTEBOOK(childWidget)) inNoteBook = true; if(!(event && withinWidget(childWidget, event))) continue; // check special cases for which grab should not be enabled if((isBlackListed(G_OBJECT(childWidget))) || (GTK_IS_NOTEBOOK(widget) && Tab::isLabel(GTK_NOTEBOOK(widget), childWidget)) || (GTK_IS_BUTTON(childWidget) && gtk_widget_get_state(childWidget) != GTK_STATE_INSENSITIVE) || (gtk_widget_get_events(childWidget) & (GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK)) || (GTK_IS_MENU_ITEM(childWidget)) || (GTK_IS_SCROLLED_WINDOW(childWidget) && (!inNoteBook || gtk_widget_is_focus(childWidget)))) { usable = false; } // if child is a container and event has been accepted so far, // also check it, recursively if (usable && GTK_IS_CONTAINER(childWidget)) { usable = childrenUseEvent(childWidget, event, inNoteBook); } } } if (children) { g_list_free(children); } return usable; }
gboolean ygtk_field_entry_set_focus (YGtkFieldEntry *fields) { GList *children = gtk_container_get_children (GTK_CONTAINER (fields)); g_return_val_if_fail (children != NULL, FALSE); GtkWidget *widget = GTK_WIDGET (children->data); g_list_free (children); gtk_editable_select_region (GTK_EDITABLE (widget), 0, -1); gtk_widget_grab_focus (widget); return gtk_widget_is_focus (widget); }
static gboolean gtk_dateentry_focus(GtkWidget *widget, GdkEventFocus *event, gpointer user_data) { GtkDateEntry *dateentry = user_data; DB( g_print(" (dateentry) focus-out-event %d\n", gtk_widget_is_focus(dateentry)) ); gtk_dateentry_entry_new(GTK_WIDGET(dateentry), dateentry); return FALSE; }
static void fsearch_window_action_toggle_focus (GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; GtkWidget *widget = GTK_WIDGET (fsearch_application_window_get_search_entry (self)); if (gtk_widget_is_focus (widget)) { widget = GTK_WIDGET (fsearch_application_window_get_listview (self)); } gtk_widget_grab_focus (widget); }
static void remmina_ftp_client_dir_on_changed(GtkWidget *widget, RemminaFTPClient *client) { GtkWidget *entry = gtk_bin_get_child(GTK_BIN(widget)); if (!gtk_widget_is_focus(entry)) { gtk_widget_grab_focus(entry); /* If the text was changed but the entry is not the focus, it should be changed by the drop-down list. Not sure this will always work in the future, but it works right now :) */ remmina_ftp_client_open_dir(client, gtk_entry_get_text(GTK_ENTRY(entry))); } }
static void show_locale_rows (GtkWidget *chooser) { CcInputChooserPrivate *priv = GET_PRIVATE (chooser); GHashTable *initial = NULL; LocaleInfo *info; GHashTableIter iter; remove_all_children (GTK_CONTAINER (priv->list)); if (!priv->showing_extra) initial = cc_common_language_get_initial_languages (); g_hash_table_iter_init (&iter, priv->locales); while (g_hash_table_iter_next (&iter, NULL, (gpointer *) &info)) { if (!info->default_input_source_row && !g_hash_table_size (info->layout_rows_by_id) && !g_hash_table_size (info->engine_rows_by_id)) continue; if (!info->locale_row) { info->locale_row = g_object_ref_sink (locale_row_new (info->name)); g_object_set_data (G_OBJECT (info->locale_row), "locale-info", info); if (!priv->showing_extra && !g_hash_table_contains (initial, info->id) && !is_current_locale (info->id)) g_object_set_data (G_OBJECT (info->locale_row), "is-extra", GINT_TO_POINTER (TRUE)); } gtk_container_add (GTK_CONTAINER (priv->list), GTK_WIDGET (info->locale_row)); } gtk_container_add (GTK_CONTAINER (priv->list), GTK_WIDGET (priv->more_row)); gtk_widget_show_all (priv->list); gtk_adjustment_set_value (priv->adjustment, gtk_adjustment_get_lower (priv->adjustment)); gtk_list_box_set_header_func (GTK_LIST_BOX (priv->list), cc_list_box_update_header_func, NULL, NULL); gtk_list_box_invalidate_filter (GTK_LIST_BOX (priv->list)); gtk_list_box_set_selection_mode (GTK_LIST_BOX (priv->list), GTK_SELECTION_NONE); gtk_list_box_set_activate_on_single_click (GTK_LIST_BOX (priv->list), TRUE); if (gtk_widget_is_visible (priv->filter_entry) && !gtk_widget_is_focus (priv->filter_entry)) gtk_widget_grab_focus (priv->filter_entry); if (!priv->showing_extra) g_hash_table_destroy (initial); }
static void test_webkit_web_view_does_not_steal_focus() { loop = g_main_loop_new(NULL, TRUE); GtkWidget *window = gtk_offscreen_window_new(); GtkWidget *webView = webkit_web_view_new(); GtkWidget *entry = gtk_entry_new(); #ifdef GTK_API_VERSION_2 GtkWidget *box = gtk_hbox_new(FALSE, 0); #else GtkWidget *box = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0); #endif gtk_container_add(GTK_CONTAINER(box), webView); gtk_container_add(GTK_CONTAINER(box), entry); gtk_container_add(GTK_CONTAINER(window), box); gtk_widget_show_all(window); gtk_widget_grab_focus(entry); g_assert(gtk_widget_is_focus(entry)); g_signal_connect(webView, "notify::load-status", G_CALLBACK(idle_quit_loop_cb), NULL); webkit_web_view_load_html_string(WEBKIT_WEB_VIEW(webView), "<html><body>" " <input id=\"entry\" type=\"text\"/>" " <script>" " document.getElementById(\"entry\").focus();" " </script>" "</body></html>", "file://"); g_main_loop_run(loop); g_assert(gtk_widget_is_focus(entry)); gtk_widget_destroy(window); g_main_loop_unref(loop); }
static void nautilus_query_editor_grab_focus (GtkWidget *widget) { NautilusQueryEditorPrivate *priv; priv = nautilus_query_editor_get_instance_private (NAUTILUS_QUERY_EDITOR (widget)); if (gtk_widget_get_visible (widget) && !gtk_widget_is_focus (priv->entry)) { /* avoid selecting the entry text */ gtk_widget_grab_focus (priv->entry); gtk_editable_set_position (GTK_EDITABLE (priv->entry), -1); } }
static void fsearch_window_action_select_all (GSimpleAction *action, GVariant *variant, gpointer user_data) { FsearchApplicationWindow *self = user_data; GtkTreeSelection *selection = fsearch_application_window_get_listview_selection (self); GtkEntry *entry = fsearch_application_window_get_search_entry (self); if (entry && gtk_widget_is_focus (GTK_WIDGET (entry))) { gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1); } else if (selection) { gtk_tree_selection_select_all (selection); } }
static void popup_button_draw (GtkWidget *widget, cairo_t *cr, UmPhotoDialog *um) { if (gtk_widget_get_state (gtk_bin_get_child (GTK_BIN (widget))) != GTK_STATE_PRELIGHT && !gtk_widget_is_focus (widget)) { return; } down_arrow (gtk_widget_get_style_context (widget), cr, gtk_widget_get_allocated_width (widget) - 12, gtk_widget_get_allocated_height (widget) - 12, 12, 12); }
static void change_password_storage_icon (GtkWidget *passwd_entry, MenuItem item) { const char *old_pwd; gboolean ask_mode; g_return_if_fail (item >= 0 && item <= ITEM_STORAGE_MAX); gtk_entry_set_icon_from_icon_name (GTK_ENTRY (passwd_entry), GTK_ENTRY_ICON_SECONDARY, icon_name_table[item]); gtk_entry_set_icon_tooltip_text (GTK_ENTRY (passwd_entry), GTK_ENTRY_ICON_SECONDARY, gettext (icon_desc_table[item])); /* We want to make entry insensitive when ITEM_STORAGE_ASK is selected * Unfortunately, making GtkEntry insensitive will also make the icon * insensitive, which prevents user from reverting the action. * Let's workaround that by disabling focus for entry instead of * sensitivity change. */ ask_mode = !!g_object_get_data (G_OBJECT (passwd_entry), ASK_MODE_TAG); if ( (item == ITEM_STORAGE_ASK && !ask_mode) || item == ITEM_STORAGE_UNUSED) { /* Store the old password */ old_pwd = gtk_entry_get_text (GTK_ENTRY (passwd_entry)); if (old_pwd && *old_pwd) g_object_set_data_full (G_OBJECT (passwd_entry), "password-old", g_strdup (old_pwd), g_free_str0); gtk_entry_set_text (GTK_ENTRY (passwd_entry), ""); if (gtk_widget_is_focus (passwd_entry)) gtk_widget_child_focus ((gtk_widget_get_toplevel (passwd_entry)), GTK_DIR_TAB_BACKWARD); gtk_widget_set_can_focus (passwd_entry, FALSE); } else { /* Set the old password to the entry */ old_pwd = g_object_get_data (G_OBJECT (passwd_entry), "password-old"); if (old_pwd && *old_pwd) gtk_entry_set_text (GTK_ENTRY (passwd_entry), old_pwd); g_object_set_data (G_OBJECT (passwd_entry), "password-old", NULL); if (!gtk_widget_get_can_focus (passwd_entry)) { gtk_widget_set_can_focus (passwd_entry, TRUE); gtk_widget_grab_focus (passwd_entry); } } }
static gboolean scroll_in_projects (GtkAccelGroup *accel_group, GObject *acceleratable, guint keyval, GdkModifierType modifier, MaintainrShell *shell) { int i; GList *boxes; GList *iter; boxes = gtk_container_get_children (GTK_CONTAINER (shell->priv->projects_box)); for (i = 0, iter = boxes; iter; i++, iter = iter->next) { printf ("%d = %s %s\n", i, gtk_widget_is_focus (iter->data) ? "true" : "false", gtk_widget_has_focus (iter->data) ? "true" : "false"); } printf ("\n"); g_list_free (boxes); return TRUE; }
static void terminal_child_exited_cb (VteReaper *reaper, GPid pid, gint status, TerminalPlugin *term_plugin) { if (term_plugin->child_pid == pid) { gboolean focus; focus = gtk_widget_is_focus (term_plugin->term); gtk_container_remove (GTK_CONTAINER (term_plugin->frame), term_plugin->term_box); gtk_container_add (GTK_CONTAINER (term_plugin->frame), term_plugin->shell_box); gtk_widget_show_all (term_plugin->shell_box); if (focus) gtk_widget_grab_focus (term_plugin->shell); term_plugin->child_pid = 0; } g_signal_emit_by_name(term_plugin, "child-exited", pid, status); }
static void ephy_title_box_title_changed_cb (GObject *gobject, GParamSpec *pspec, gpointer user_data) { EphyTitleBox *title_box = EPHY_TITLE_BOX (user_data); WebKitWebView *web_view = WEBKIT_WEB_VIEW (gobject); const gchar *title; LOG ("notify::title web_view %p title-box %p\n", web_view, title_box); title = webkit_web_view_get_title (web_view); if (gtk_widget_is_focus (title_box->entry) || !title || *title == '\0') { ephy_title_box_set_mode (title_box, EPHY_TITLE_BOX_MODE_LOCATION_ENTRY); return; } ephy_title_box_set_mode (title_box, EPHY_TITLE_BOX_MODE_TITLE); }
static void shell_searchbar_execute_search_cb (EShellView *shell_view, EShellSearchbar *searchbar) { EShellContent *shell_content; shell_searchbar_update_search_widgets (searchbar); e_shell_searchbar_save_state (searchbar); if (!e_shell_view_is_active (shell_view)) return; /* Direct the focus away from the search entry, so that a * focus-in event is required before the text can be changed. * This will reset the entry to the appropriate visual state. */ if (gtk_widget_is_focus (searchbar->priv->search_entry)) { shell_content = e_shell_view_get_shell_content (shell_view); e_shell_content_focus_search_results (shell_content); } }
void on_remove_field_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkTreeView *treeview = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); if (!gtk_widget_is_focus(GTK_WIDGET (treeview))) { return; // do not remove field if Metadata tab is not focused } GtkTreePath *path; GtkTreeViewColumn *col; gtk_tree_view_get_cursor (treeview, &path, &col); if (!path || !col) { return; } GtkTreeIter iter; gtk_tree_model_get_iter (GTK_TREE_MODEL (store), &iter, path); GValue value = {0,}; gtk_tree_model_get_value (GTK_TREE_MODEL (store), &iter, 2, &value); const char *svalue = g_value_get_string (&value); // delete unknown fields completely; otherwise just clear int i = 0; for (; types[i]; i += 2) { if (!strcasecmp (svalue, types[i])) { break; } } if (types[i]) { // known val, clear gtk_list_store_set (store, &iter, 1, "", 3, 0, -1); } else { gtk_list_store_remove (store, &iter); } gtk_tree_view_set_cursor (treeview, path, NULL, FALSE); // restore cursor after deletion gtk_tree_path_free (path); trkproperties_modified = 1; }
static void popup_button_expose (GtkWidget *widget, GdkEventExpose *event, UmPhotoDialog *um) { GtkAllocation allocation; if (gtk_widget_get_state (widget) != GTK_STATE_PRELIGHT && !gtk_widget_is_focus (gtk_widget_get_parent (widget))) { return; } gtk_widget_get_allocation (widget, &allocation); gtk_paint_expander (gtk_widget_get_style (widget), gtk_widget_get_window (widget), gtk_widget_get_state (widget), NULL, widget, NULL, allocation.x + allocation.width, allocation.y + allocation.height, GTK_EXPANDER_EXPANDED); }
static gboolean ephy_node_view_button_press_cb (GtkWidget *treeview, GdkEventButton *event, EphyNodeView *view) { GtkTreePath *path = NULL; GtkTreeSelection *selection; gboolean call_parent = TRUE, path_is_selected; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview)); if (event->window != gtk_tree_view_get_bin_window (GTK_TREE_VIEW (treeview))) { return GTK_WIDGET_CLASS (parent_class)->button_press_event (treeview, event); } if (gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (treeview), event->x, event->y, &path, NULL, NULL, NULL)) { path_is_selected = gtk_tree_selection_path_is_selected (selection, path); if (!gtk_widget_is_focus (GTK_WIDGET (treeview))) { gtk_widget_grab_focus (GTK_WIDGET (treeview)); } if (event->button == 3 && path_is_selected) { call_parent = FALSE; } if(!button_event_modifies_selection (event) && event->button == 1 && path_is_selected && gtk_tree_selection_count_selected_rows (selection) > 1) { call_parent = FALSE; } if (call_parent) { GTK_WIDGET_CLASS (parent_class)->button_press_event (treeview, event); } if (event->button == 3) { gboolean retval; g_signal_emit_by_name (view, "popup_menu", &retval); } else if (event->button == 2) { EphyNode *clicked_node; clicked_node = process_middle_click (path, view); g_signal_emit (G_OBJECT (view), ephy_node_view_signals[NODE_MIDDLE_CLICKED], 0, clicked_node); } else if (event->button == 1) { if (view->priv->toggle_column >= 0) { path_toggled (NULL, path, NULL, view); } else { view->priv->drag_started = FALSE; view->priv->drag_button = event->button; view->priv->drag_x = event->x; view->priv->drag_y = event->y; } } gtk_tree_path_free (path); } else { gtk_tree_selection_unselect_all (selection); } return TRUE; }
/** * ephy_node_view_is_target: * @view: an #EphyNodeView * * Tells if @view is currently focused. * * Returns: %TRUE if @view is focused **/ gboolean ephy_node_view_is_target (EphyNodeView *view) { return gtk_widget_is_focus (GTK_WIDGET (view)); }
void on_add_field_activate (GtkMenuItem *menuitem, gpointer user_data) { GtkTreeView *treeview = GTK_TREE_VIEW (lookup_widget (trackproperties, "metalist")); if (!gtk_widget_is_focus(GTK_WIDGET (treeview))) { return; // do not add field if Metadata tab is not focused } GtkWidget *dlg = create_entrydialog (); gtk_window_set_transient_for (GTK_WINDOW (dlg), GTK_WINDOW (trackproperties)); gtk_dialog_set_default_response (GTK_DIALOG (dlg), GTK_RESPONSE_OK); gtk_window_set_title (GTK_WINDOW (dlg), _("Field name")); GtkWidget *e; e = lookup_widget (dlg, "title_label"); gtk_label_set_text (GTK_LABEL(e), _("Name:")); for (;;) { int res = gtk_dialog_run (GTK_DIALOG (dlg)); if (res == GTK_RESPONSE_OK) { e = lookup_widget (dlg, "title"); const char *text = gtk_entry_get_text (GTK_ENTRY(e)); GtkTreeIter iter; // check for _ and : if (text[0] == '_' || text[0] == ':' || text[0] == '!') { GtkWidget *d = gtk_message_dialog_new (GTK_WINDOW (dlg), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Field names must not start with : or _")); gtk_window_set_title (GTK_WINDOW (d), _("Cannot add field")); gtk_dialog_run (GTK_DIALOG (d)); gtk_widget_destroy (d); continue; } // check if a field with the same name already exists int dup = 0; gboolean res = gtk_tree_model_get_iter_first (GTK_TREE_MODEL (store), &iter); while (res) { GValue value = {0,}; gtk_tree_model_get_value (GTK_TREE_MODEL (store), &iter, 2, &value); const char *svalue = g_value_get_string (&value); if (!strcasecmp (svalue, text)) { dup = 1; break; } res = gtk_tree_model_iter_next (GTK_TREE_MODEL (store), &iter); } if (!dup) { int l = strlen (text); char title[l+3]; snprintf (title, sizeof (title), "<%s>", text); const char *value = ""; const char *key = text; gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, 0, title, 1, value, 2, key, -1); GtkTreePath *path; gint rows = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (store), NULL); path = gtk_tree_path_new_from_indices (rows - 1, -1); gtk_tree_view_set_cursor (treeview, path, NULL, TRUE); // set cursor onto new field gtk_tree_path_free(path); trkproperties_modified = 1; } else { GtkWidget *d = gtk_message_dialog_new (GTK_WINDOW (dlg), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, _("Field with such name already exists, please try different name.")); gtk_window_set_title (GTK_WINDOW (d), _("Cannot add field")); gtk_dialog_run (GTK_DIALOG (d)); gtk_widget_destroy (d); continue; } } break; } gtk_widget_destroy (dlg); gtk_window_present (GTK_WINDOW (trackproperties)); }
gint key_press_cb (GtkWidget *widget, GdkEventKey *event, gpointer data) { gint page; page = gtk_notebook_get_current_page (GTK_NOTEBOOK(notebook)); /************************************************************************/ /*** CALENDAR PAGE ***/ /************************************************************************/ if(page == PAGE_CALENDAR) { if (!config.day_notes_visible) { switch (event->keyval) { case GDK_Left: calendar_btn_prev_day(); return TRUE; case GDK_Right: calendar_btn_next_day(); return TRUE; case GDK_Up: calendar_btn_prev_week(); return TRUE; case GDK_Down: calendar_btn_next_week(); return TRUE; case GDK_Home: calendar_btn_prev_year(); return TRUE; case GDK_End: calendar_btn_next_year(); return TRUE; case GDK_Return: if (calendar_only == FALSE) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(notes_button), !gtk_toggle_tool_button_get_active(GTK_TOGGLE_TOOL_BUTTON(notes_button))); } return TRUE; case GDK_space: set_today (TRUE); return TRUE; case GDK_Delete: if (calendar_only == FALSE) { calendar_clear_text_cb (NULL, NULL); } return TRUE; case GDK_g: calendar_create_jumpto_window (); return TRUE; case GDK_f: calendar_create_fullyear_window (); return TRUE; } } switch (event->keyval) { case GDK_Escape: if (calendar_only == FALSE) { gtk_toggle_tool_button_set_active(GTK_TOGGLE_TOOL_BUTTON(notes_button), FALSE); } return TRUE; case GDK_Left: if (event->state & GDK_MOD1_MASK) { /* ALT + Left */ calendar_btn_prev_day(); return TRUE; } return FALSE; case GDK_Right: if (event->state & GDK_MOD1_MASK) { /* ALT + Right */ calendar_btn_next_day(); return TRUE; } return FALSE; case GDK_Up: if (event->state & GDK_MOD1_MASK) { /* ALT + Up */ calendar_btn_prev_week(); return TRUE; } return FALSE; case GDK_Down: if (event->state & GDK_MOD1_MASK) { /* ALT + Down */ calendar_btn_next_week(); return TRUE; } return FALSE; } } /************************************************************************/ /*** TASKS PAGE ***/ /************************************************************************/ if(page == PAGE_TASKS) { switch (event->keyval) { case GDK_Escape: if(tasks_panel_status == TRUE) { show_tasks_desc_panel(FALSE); } return TRUE; case GDK_Return: if (event->state & GDK_CONTROL_MASK) { /* CTRL + Enter */ if (gtk_tree_selection_get_selected (tasks_list_selection, NULL, NULL)) { tasks_add_edit_dialog_show (TRUE); return TRUE; } } if(tasks_panel_status == FALSE) { show_tasks_desc_panel(TRUE); } return TRUE; case GDK_h: if (event->state & GDK_CONTROL_MASK) { /* CTRL + h */ config.hide_completed = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON(ct_hide_items_checkbutton)); config.hide_completed = !config.hide_completed; gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON(ct_hide_items_checkbutton), config.hide_completed); gtk_tree_model_filter_refilter(GTK_TREE_MODEL_FILTER(tasks_filter)); } return TRUE; case GDK_Delete: tasks_remove_dialog_show(tasks_list, tasks_list_store); return TRUE; case GDK_Insert: tasks_add_edit_dialog_show (FALSE); return TRUE; case GDK_space: return TRUE; case GDK_Left: if (filter_index > 0) { filter_index--; gtk_combo_box_set_active(GTK_COMBO_BOX(cf_combobox), filter_index); } return TRUE; case GDK_Right: if (filter_index < get_combobox_items(GTK_COMBO_BOX(cf_combobox))-1) { filter_index++; gtk_combo_box_set_active(GTK_COMBO_BOX(cf_combobox), filter_index); } return TRUE; } } /************************************************************************/ /*** CONTACTS PAGE ***/ /************************************************************************/ if(page == PAGE_CONTACTS) { switch (event->keyval) { case GDK_Escape: if (gtk_widget_is_focus(contacts_find_entry) == FALSE) { if(contacts_panel_status == TRUE) { show_contacts_desc_panel(FALSE); } } else { if (strlen(gtk_entry_get_text(GTK_ENTRY(contacts_find_entry)))) { gtk_entry_set_text(GTK_ENTRY(contacts_find_entry), ""); } } return TRUE; case GDK_Return: if (event->state & GDK_CONTROL_MASK) { /* CTRL + Enter */ if (gtk_tree_selection_get_selected (contacts_list_selection, NULL, NULL)) { contacts_add_edit_dialog_show (TRUE); return TRUE; } } if(contacts_panel_status == FALSE) { show_contacts_desc_panel(TRUE); return TRUE; } else if (gtk_widget_is_focus(contacts_find_entry) == FALSE) { gui_scrolled_window_move_position(contacts_panel_scrolledwindow, SW_MOVE_DOWN); return TRUE; } return FALSE; case GDK_BackSpace: if(contacts_panel_status == TRUE && gtk_widget_is_focus(contacts_find_entry) == FALSE) { gui_scrolled_window_move_position(contacts_panel_scrolledwindow, SW_MOVE_UP); return TRUE; } return FALSE; case GDK_Delete: if(gtk_widget_is_focus(contacts_find_entry) == FALSE) { contacts_remove_dialog_show(contacts_list, contacts_list_store); return TRUE; } return FALSE; case GDK_Insert: if(gtk_widget_is_focus(contacts_find_entry) == FALSE) { contacts_add_edit_dialog_show (FALSE); return TRUE; } return FALSE; case GDK_1: if (event->state & GDK_MOD1_MASK) { /* ALT + 1 */ gtk_combo_box_set_active(GTK_COMBO_BOX(contacts_find_combobox), CONTACTS_FF_FIRST_NAME); return TRUE; } return FALSE; case GDK_2: if (event->state & GDK_MOD1_MASK) { /* ALT + 2 */ gtk_combo_box_set_active(GTK_COMBO_BOX(contacts_find_combobox), CONTACTS_FF_LAST_NAME); return TRUE; } return FALSE; case GDK_3: if (event->state & GDK_MOD1_MASK) { /* ALT + 3 */ gtk_combo_box_set_active(GTK_COMBO_BOX(contacts_find_combobox), CONTACTS_FF_ALL_FIELDS); return TRUE; } return FALSE; case GDK_l: if (event->state & GDK_CONTROL_MASK) { /* CTRL + l */ gtk_widget_grab_focus(GTK_WIDGET(contacts_find_entry)); return TRUE; } return FALSE; } } /************************************************************************/ /*** OPTIONS PAGE ***/ /************************************************************************/ if(page == PAGE_OPTIONS) { if (!(event->state & GDK_CONTROL_MASK)) { /* CTRL + Page_Up */ switch (event->keyval) { case GDK_Page_Down: options_switch_buttons(FALSE); return TRUE; case GDK_Page_Up: options_switch_buttons(TRUE); return TRUE; } } } /************************************************************************/ /*** ABOUT PAGE ***/ /************************************************************************/ if(page == PAGE_ABOUT) { if (!(event->state & GDK_CONTROL_MASK)) { /* CTRL + Page_Up */ switch (event->keyval) { case GDK_Page_Down: about_switch_buttons(FALSE); return TRUE; case GDK_Page_Up: about_switch_buttons(TRUE); return TRUE; } } } /************************************************************************/ /*** GLOBAL SHORTCUTS ***/ /************************************************************************/ switch (event->keyval) { case GDK_q: if (event->state & GDK_CONTROL_MASK) { /* CTRL + Q */ gui_window_close_cb(NULL, NULL); } return FALSE; case GDK_Page_Up: if (event->state & GDK_CONTROL_MASK) { /* CTRL + Page_Up */ current_tab--; current_tab = current_tab < 0 ? number_of_tabs-1:current_tab; gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), current_tab); return TRUE; } else if (page == PAGE_CALENDAR) { if (config.day_notes_visible) { if (event->state & GDK_MOD1_MASK) { /* ALT + Page_Up */ calendar_btn_prev_month(); return TRUE; } } else { calendar_btn_prev_month(); return TRUE; } } return FALSE; case GDK_Page_Down: if (event->state & GDK_CONTROL_MASK) { /* CTRL + Page_Down */ current_tab++; current_tab = current_tab == number_of_tabs ? 0:current_tab; gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), current_tab); return TRUE; } else if (page == PAGE_CALENDAR) { if (config.day_notes_visible) { if (event->state & GDK_MOD1_MASK) { /* ALT + Page_Down */ calendar_btn_next_month(); return TRUE; } } else { calendar_btn_next_month(); return TRUE; } } return FALSE; case GDK_F1: gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), PAGE_CALENDAR); return TRUE; case GDK_F2: gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), PAGE_TASKS); return TRUE; case GDK_F3: gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), PAGE_CONTACTS); return TRUE; case GDK_F4: gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), PAGE_OPTIONS); return TRUE; case GDK_F5: gtk_notebook_set_current_page (GTK_NOTEBOOK (notebook), PAGE_ABOUT); return TRUE; } return FALSE; }