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;
}
Esempio n. 2
0
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));
  }
}
Esempio n. 3
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;
}
Esempio n. 4
0
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));
	}
}
Esempio n. 5
0
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);
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
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);
}
Esempio n. 10
0
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;
}
Esempio n. 11
0
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);
}
Esempio n. 12
0
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;
}
Esempio n. 13
0
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);
}
Esempio n. 14
0
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);
}
Esempio n. 16
0
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);
}
Esempio n. 17
0
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);
    }
}
Esempio n. 18
0
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);
}
Esempio n. 20
0
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);
        }
    }
}
Esempio n. 21
0
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;
}
Esempio n. 22
0
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);
}
Esempio n. 23
0
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);
}
Esempio n. 24
0
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);
	}
}
Esempio n. 25
0
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);
}
Esempio n. 27
0
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;
}
Esempio n. 28
0
/**
 * 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));
}
Esempio n. 29
0
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));
}
Esempio n. 30
0
File: gui.c Progetto: rosedu/osmo
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;
}