Beispiel #1
0
void PluginManageDlg::drag_data_received_cb(GtkWidget *widget, GdkDragContext *ctx, guint x, guint y, GtkSelectionData *sd, guint info, guint t, PluginManageDlg *oPluginManageDlg)
{
	if (gtk_selection_data_get_target(sd) == gdk_atom_intern("STARDICT_PLUGINMANAGE", FALSE) && gtk_selection_data_get_data(sd)) {
		GtkTreePath *path = NULL;
		GtkTreeViewDropPosition position;
		GtkTreeIter drag_iter;
		memcpy(&drag_iter, gtk_selection_data_get_data(sd), sizeof(drag_iter));
		if (gtk_tree_view_get_dest_row_at_pos(GTK_TREE_VIEW(widget), x, y, &path, &position)) {
			GtkTreeIter iter;
			GtkTreeModel *model = GTK_TREE_MODEL(oPluginManageDlg->plugin_tree_model);
			gtk_tree_model_get_iter(model, &iter, path);
			if (gtk_tree_model_iter_has_child(model, &iter)) {
				gtk_drag_finish (ctx, FALSE, FALSE, t);
				return;
			}
			if (gtk_tree_model_iter_has_child(model, &drag_iter)) {
				gtk_drag_finish (ctx, FALSE, FALSE, t);
				return;
			}
			GtkTreeIter parent_iter;
			if (!gtk_tree_model_iter_parent(model, &parent_iter, &iter)) {
				gtk_drag_finish (ctx, FALSE, FALSE, t);
				return;
			}
			GtkTreeIter drag_parent_iter;
			if (!gtk_tree_model_iter_parent(model, &drag_parent_iter, &drag_iter)) {
				gtk_drag_finish (ctx, FALSE, FALSE, t);
				return;
			}
			char *iter_str, *drag_iter_str;
			iter_str = gtk_tree_model_get_string_from_iter(model, &parent_iter);
			drag_iter_str = gtk_tree_model_get_string_from_iter(model, &drag_parent_iter);
			if (strcmp(iter_str, drag_iter_str) != 0) {
				g_free(iter_str);
				g_free(drag_iter_str);
				gtk_drag_finish (ctx, FALSE, FALSE, t);
				return;
			}
			g_free(iter_str);
			g_free(drag_iter_str);
			switch (position) {
				case GTK_TREE_VIEW_DROP_AFTER:
				case GTK_TREE_VIEW_DROP_INTO_OR_AFTER:
					gtk_tree_store_move_after(GTK_TREE_STORE(model), &drag_iter, &iter);
					break;
				case GTK_TREE_VIEW_DROP_BEFORE:
				case GTK_TREE_VIEW_DROP_INTO_OR_BEFORE:
					gtk_tree_store_move_before(GTK_TREE_STORE(model), &drag_iter, &iter);
					break;
				default: {
					gtk_drag_finish (ctx, FALSE, FALSE, t);
					return;
				}
			}
			oPluginManageDlg->write_order_list();
			oPluginManageDlg->order_changed_ = true;
			gtk_drag_finish (ctx, TRUE, FALSE, t);
		}
	}
}
gchar *nsgtk_history_parent_get(gchar *domain)
{
	GtkTreeIter iter;
	gchar *path;
	
	/* Adds an extra entry in the list to act as the root domain
	 * (which will keep track of things like visits to all sites
	 * in the domain), This does not work as a tree because the
	 * children cannot be displayed if the root is hidden
	 * (which would conflict with the site view) */
	path = g_hash_table_lookup(history->domain_hash, domain);
		
	if (path == NULL){
		gtk_list_store_append(history->domain_list, &iter);
		gtk_list_store_set(history->domain_list, &iter,
				DOM_DOMAIN, domain,
				DOM_LASTVISIT, messages_get("gtkUnknownHost"),
				DOM_TOTALVISITS, 0,
				-1);
		
		path = gtk_tree_model_get_string_from_iter(
				GTK_TREE_MODEL(history->domain_list), &iter);					
		g_hash_table_insert(history->domain_hash, domain,
				path);
	} 

	return path;
}
Beispiel #3
0
void
on_interpreter_cell_changed(GtkCellRendererCombo *combo, char *path_string, GtkTreeIter *new_iter, ChimaraGlk *glk)
{
	unsigned int format, interpreter;
	format = (unsigned int)strtol(path_string, NULL, 10);
	GtkTreeModel *combo_model;
	g_object_get(combo, "model", &combo_model, NULL);
	char *combo_string = gtk_tree_model_get_string_from_iter(combo_model, new_iter);
	interpreter = (unsigned int)strtol(combo_string, NULL, 10);
	g_free(combo_string);

	chimara_if_set_preferred_interpreter(CHIMARA_IF(glk), format, interpreter);

	/* Display the new setting in the list */
	GtkTreeIter iter;
	GtkTreePath *path = gtk_tree_path_new_from_string(path_string);
	gtk_tree_model_get_iter(GTK_TREE_MODEL(preferred_list), &iter, path);
	gtk_tree_path_free(path);
	gtk_list_store_set(preferred_list, &iter,
		1, interpreter_to_display_string(interpreter),
		-1);

	/* Save the new settings in the preferences file */
	extern GSettings *prefs_settings;
	GVariantBuilder *builder = g_variant_builder_new( G_VARIANT_TYPE("a{ss}") );
	unsigned int count;
	for(count = 0; count < CHIMARA_IF_NUM_FORMATS; count++) {
		g_variant_builder_add(builder, "{ss}",
			format_to_string(count),
			interpreter_to_string(chimara_if_get_preferred_interpreter(CHIMARA_IF(glk), count)));
	}
	g_settings_set(prefs_settings, "preferred-interpreters", "a{ss}", builder);
	g_variant_builder_unref(builder);
}
static gchar *
find_string_in_model (GtkTreeModel *model, const gchar *value, gint column)
{
  GtkTreeIter iter;
  gboolean valid;
  gchar *path = NULL, *test;

  if (!value)
    return NULL;

  for (valid = gtk_tree_model_get_iter_first (model, &iter); valid;
       valid = gtk_tree_model_iter_next (model, &iter))
  {
    gtk_tree_model_get (model, &iter, column, &test, -1);

    if (test)
    {
      gint cmp = strcmp (test, value);
      g_free (test);

      if (!cmp)
      {
        path = gtk_tree_model_get_string_from_iter (model, &iter);
        break;
      }
    }
  }

  return path;
}
Beispiel #5
0
static void cancelDownloadCallback(GtkWidget *button, BrowserDownloadDialog *dialog)
{
    GtkTreeModel * model;
    GtkTreeIter iter;
    WebKitDownload *wkDownload;

    if (gtk_tree_selection_get_selected(GTK_TREE_SELECTION(dialog->select), &model, &iter))
    {
        gtk_tree_model_get (GTK_TREE_MODEL(dialog->model), &iter, 7, &wkDownload, -1);
        if(wkDownload)
        {
            webkit_download_cancel(WEBKIT_DOWNLOAD(wkDownload));
            gtk_list_store_remove(dialog->model, &iter);
            return;
        }

        char *treeviewIndex = g_strdup_printf("%s", gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(dialog->model), &iter));
        if(treeviewIndex)
        {
            size_t listIndex = atoi(treeviewIndex);
            DeleteList(dialog->download,listIndex);
        }
        g_printerr("store_remove\n");
        gtk_list_store_remove(dialog->model, &iter);
    }
}
static void
impl_get_item_attributes (GMenuModel *menu_model, int item_index, GHashTable **attrs)
{
	RBDisplayPageMenu *menu = RB_DISPLAY_PAGE_MENU (menu_model);
	RBDisplayPage *page;
	GtkTreeIter iter;

	*attrs = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) g_variant_unref);

	page = get_page_at_index (menu, item_index, &iter);
	if (page != NULL) {
		char *name;
		char *path;
		GVariant *v;

		g_object_get (page, "name", &name, NULL);
		rb_debug ("page at %d is %s", item_index, name);
		g_hash_table_insert (*attrs, g_strdup ("label"), g_variant_new_string (name));
		g_free (name);

		g_hash_table_insert (*attrs, g_strdup ("action"), g_variant_new_string (menu->priv->action));

		path = gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL (menu->priv->model), &iter);
		/* this is a bit awkward.. */
		v = g_variant_new_string (path);
		g_hash_table_insert (*attrs, g_strdup ("target"), g_variant_ref_sink (v));
		g_free (path);
	} else {
		rb_debug ("no page at %d", item_index);
	}
}
Beispiel #7
0
static void display_calendar_for_selected_row(struct commodity_register *commodity_register) {
    if (gtk_tree_selection_count_selected_rows(COMMODITY_REGISTER_CORE.selection)  == 1) {
        GtkTreeIter iter;
        GtkTreeModel *model;

        if (gtk_tree_selection_get_selected(COMMODITY_REGISTER_CORE.selection, &model, &iter)) {
            gchar *current_timestamp = get_string_column_via_iter(model, &iter, STORE_TIMESTAMP), *new_date;
            gchar current_date[DATE_SIZE];

            strncpy(current_date, current_timestamp, DATE_SIZE-1);
            current_date[DATE_SIZE-1] = NULL_CHARACTER;

            new_date = display_calendar(current_date, GTK_WIDGET(COMMODITY_REGISTER_CORE.window));
            /* Did we get a date back? */
            if (new_date != NULL) {
                gchar *path_string = gtk_tree_model_get_string_from_iter(model, &iter);
                gchar *new_time_stamp = g_strdup_printf("%s 00:00:00", new_date);
                timestamp_edited(GTK_CELL_RENDERER_TEXT(commodity_register->timestamp_renderer), path_string, new_time_stamp, commodity_register);
                g_free(path_string);
                g_free(new_date);
                g_free(new_time_stamp);
            }
        } else {
            fprintf(stderr, "mouse_button_pressed: gtk_tree_selection_get_selected failed\n");
            exit(EXIT_FAILURE);
        }
    } else
        display_message_dialog("Improper selection", GTK_MESSAGE_WARNING, COMMODITY_REGISTER_CORE.window);
}
static void fill_combo_box (GtkIconTheme *theme, GtkComboBox *combo_box, GList *app_list)
{
    GList *entry;
    GtkTreeModel *model;
    GtkCellRenderer *renderer;
    GtkTreeIter iter;
    GdkPixbuf *pixbuf;

    if (theme == NULL) {
	theme = gtk_icon_theme_get_default ();
    }

    gtk_combo_box_set_row_separator_func (combo_box, is_separator,
					  GINT_TO_POINTER (g_list_length (app_list)), NULL);

    model = GTK_TREE_MODEL (gtk_list_store_new (2, GDK_TYPE_PIXBUF, G_TYPE_STRING));
    gtk_combo_box_set_model (combo_box, model);

    renderer = gtk_cell_renderer_pixbuf_new ();

    /* not all cells have a pixbuf, this prevents the combo box to shrink */
    gtk_cell_renderer_set_fixed_size (renderer, -1, 22);
    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, FALSE);
    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer,
				    "pixbuf", PIXBUF_COL,
				    NULL);

    renderer = gtk_cell_renderer_text_new ();
    gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_box), renderer, TRUE);
    gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_box), renderer,
				    "text", TEXT_COL,
				    NULL);

    for (entry = app_list; entry != NULL; entry = g_list_next (entry)) {
	MateDAItem *item;
	item = (MateDAItem *) entry->data;

	pixbuf = gtk_icon_theme_load_icon (theme, item->icon_name, 22, 0, NULL);

	gtk_list_store_append (GTK_LIST_STORE (model), &iter);
	gtk_list_store_set (GTK_LIST_STORE (model), &iter,
			    PIXBUF_COL, pixbuf,
			    TEXT_COL, item->name,
			    -1);

	item->icon_path = gtk_tree_model_get_string_from_iter (model, &iter);

	if (pixbuf)
	    g_object_unref (pixbuf);
    }

    gtk_list_store_append (GTK_LIST_STORE (model), &iter);
    gtk_list_store_set (GTK_LIST_STORE (model), &iter, -1);
    gtk_list_store_append (GTK_LIST_STORE (model), &iter);
    gtk_list_store_set (GTK_LIST_STORE (model), &iter,
			PIXBUF_COL, NULL,
			TEXT_COL, _("Custom"),
			-1);
}
/**
 * Move account in list depending on direction and selected account
 */
static void
account_move(gboolean move_up, gpointer data)
{
    // Get view, model and selection of account
    GtkTreeView *tree_view = GTK_TREE_VIEW(data);
    GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
    GtkTreeSelection *selection = gtk_tree_view_get_selection(tree_view);

    // Find selected iteration and create a copy
    GtkTreeIter iter;
    gtk_tree_selection_get_selected(selection, &model, &iter);
    GtkTreeIter *iter_copy;
    iter_copy = gtk_tree_iter_copy(&iter);

    // Find path of iteration
    gchar *path = gtk_tree_model_get_string_from_iter(model, &iter);

    // The first real account in the list can't move up because of the IP2IP account
    // It can still move down though
    if (g_strcmp0(path, "1") == 0 && move_up)
        return;

    GtkTreePath *tree_path = gtk_tree_path_new_from_string(path);
    gint *indices = gtk_tree_path_get_indices(tree_path);
    const gint pos = indices[0] - 1; /* black magic : gtk tree order is not account queue order */

    // Depending on button direction get new path
    if (move_up)
        gtk_tree_path_prev(tree_path);
    else
        gtk_tree_path_next(tree_path);

    gtk_tree_model_get_iter(model, &iter, tree_path);

    // Swap iterations if valid
    if (gtk_list_store_iter_is_valid(GTK_LIST_STORE(model), &iter))
        gtk_list_store_swap(GTK_LIST_STORE(model), &iter, iter_copy);

    // Scroll to new position
    gtk_tree_view_scroll_to_cell(tree_view, tree_path, NULL, FALSE, 0, 0);

    // Free resources
    gtk_tree_path_free(tree_path);
    gtk_tree_iter_free(iter_copy);
    g_free(path);

    // Perpetuate changes in account queue
    if (move_up)
        account_list_move_up(pos);
    else
        account_list_move_down(pos);

    // Set the order in the configuration file
    gchar *ordered_account_list = account_list_get_ordered_list();
    dbus_set_accounts_order(ordered_account_list);
    g_free(ordered_account_list);
}
Beispiel #10
0
const char* cardtree_append(cardtree_t* ct,
			    const char* path, gboolean leaf,
	      		    const char* node, const char* id, int length, const char* comment)
{
  GtkTreeIter parent;
  GtkTreeIter child;
  char length_string[12];

  if (path!=NULL && cardtree_is_empty(ct))
    return NULL;

  if (node==NULL)
    return NULL;

  if (path!=NULL)
  {
    if (gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(ct->_store),&parent,path)==FALSE)
      return NULL;
    gtk_tree_store_append (ct->_store, &child, &parent);
  }
  else
  {
    gtk_tree_store_append (ct->_store, &child, NULL);
  }
  cardtree_clear_tmpstr(ct);

  ct->_tmpstr = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(ct->_store),&child);

  /* FIXME : check if parent is not leaf */
  gtk_tree_store_set (ct->_store, &child, 
		      C_LEAF, leaf, 
		      C_NODE, node, 
		      -1);

  if (length>=0)
  {
    sprintf(length_string,"%i",length);
    gtk_tree_store_set (ct->_store, &child,
			C_LENGTH, length_string,
			-1);
  }

  if (id && !leaf) 
    gtk_tree_store_set (ct->_store, &child, 
	  		C_ID, id, 
  			-1);
  if (comment) 
    gtk_tree_store_set (ct->_store, &child, 
	  		C_COMMENT, comment, 
  			-1);

  cardtree_create_markup(ct,&child);

  return ct->_tmpstr;
}
Beispiel #11
0
static void
codec_moved_cb (GtkWidget *widget, 
                gpointer data)
{ 	
  CodecsBox *self = NULL;

  GtkTreeIter iter;
  GtkTreeIter *iter2 = NULL;
  GtkTreeModel *model = NULL;
  GtkTreeSelection *selection = NULL;
  GtkTreePath *tree_path = NULL;

  std::list<std::string> list;

  gchar *path_str = NULL;

  self = CODECS_BOX (data);

  model = gtk_tree_view_get_model (GTK_TREE_VIEW (self->priv->codecs_list));
  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (self->priv->codecs_list));
  if (!gtk_tree_selection_get_selected (GTK_TREE_SELECTION (selection), 
                                        NULL, &iter))
    return;

  /* Update the tree view */
  iter2 = gtk_tree_iter_copy (&iter);
  path_str = gtk_tree_model_get_string_from_iter (GTK_TREE_MODEL (model), 
                                                  &iter);
  tree_path = gtk_tree_path_new_from_string (path_str);
  if (!g_strcmp0 ((gchar *) g_object_get_data (G_OBJECT (widget), "operation"), 
               "up"))
    gtk_tree_path_prev (tree_path);
  else
    gtk_tree_path_next (tree_path);

  gtk_tree_model_get_iter (GTK_TREE_MODEL (model), &iter, tree_path);
  if (gtk_list_store_iter_is_valid (GTK_LIST_STORE (model), &iter)
      && gtk_list_store_iter_is_valid (GTK_LIST_STORE (model), iter2))
    gtk_list_store_swap (GTK_LIST_STORE (model), &iter, iter2);

  /* Scroll to the new position */
  gtk_tree_view_scroll_to_cell (GTK_TREE_VIEW (self->priv->codecs_list), 
                                tree_path, NULL, FALSE, 0, 0);

  gtk_tree_path_free (tree_path);
  gtk_tree_iter_free (iter2);
  g_free (path_str);

  /* Update the key */
  list = codecs_box_to_list (self);
  if (self->priv->type == Ekiga::Call::Audio)
    self->priv->audio_settings->set_string_list ("media-list", list);
  else if (self->priv->type == Ekiga::Call::Video)
    self->priv->video_settings->set_string_list ("media-list", list);
}
Beispiel #12
0
static VALUE
rg_to_str(VALUE self)
{
    GtkTreeIter* iter = _SELF(self);
    GtkTreeModel* model = (GtkTreeModel*)iter->user_data3;

    gchar* s = gtk_tree_model_get_string_from_iter (model, iter);
    VALUE result = CSTR2RVAL(s);
    g_free(s);
    return result;
}
void nsgtk_history_domain_set_visible (GtkTreeModel *model, GtkTreePath *path,
		GtkTreeIter *iter, gboolean has_sites)
{
	gchar *string = gtk_tree_model_get_string_from_iter(model, iter);
	
	if (!g_str_equal(string, "0")) /* "All" */
		gtk_list_store_set(GTK_LIST_STORE(model), iter, 
				DOM_HAS_SITES, has_sites, -1);
	
	g_free(string);
}
Beispiel #14
0
static void ListView_change(GtkTreeView* treeView, ListView* self) {
  GtkTreeIter iter;
  if(!gtk_tree_selection_get_selected(gtk_tree_view_get_selection(treeView), 0, &iter)) return;  //should not be possible
  char* path = gtk_tree_model_get_string_from_iter(gtk_tree_view_get_model(treeView), &iter);
  unsigned selection = decimal(path);
  g_free(path);

  if(!self->state.selected || self->state.selection != selection) {
    self->state.selected = true;
    self->state.selection = selection;
    if(self->onChange) self->onChange();
  }
}
static void
trackersettings_clist_selected (GtkTreeSelection *sel,
				TrackerSettings *ts)
{
    GtkTreeModel *mdl;
    GtkTreeIter iter;
    gchar *str;
    gint row;
    
    if(gtk_tree_selection_get_selected(sel, &mdl, &iter)) {
	row = atoi(str = gtk_tree_model_get_string_from_iter(mdl, &iter));
	g_free(str);
	ts->clist_selected_row = row;
    }
}
Beispiel #16
0
gboolean ListSelectionChange(GtkTreeView *treeview, gpointer data)
{ // the selected channel has (probably) changed
	GtkTreeSelection *ts;
	GtkTreeModel *tm;
	GtkTreeIter it;
	ts=gtk_tree_view_get_selection(GTK_TREE_VIEW(GetWidget("channels")));
	if (gtk_tree_selection_get_selected(ts,&tm,&it)) {
		char *rows=gtk_tree_model_get_string_from_iter(tm,&it);
		chan=atoi(rows);
		g_free(rows);
	} else
		chan=-1;
	UpdateButtons();
	return TRUE;
}
static void
treeview_gsettings_changed_callback (GSettings *settings, gchar *key, GtkTreeView *list)
{
  GtkTreeModel *store;
  gchar *curr_value;
  gchar *path;

  /* find value in model */
  curr_value = g_settings_get_string (settings, key);
  store = gtk_tree_view_get_model (list);

  path = find_string_in_model (store, curr_value, COL_NAME);

  /* Add a temporary item if we can't find a match
   * TODO: delete this item if it is no longer selected?
   */
  if (!path)
  {
    GtkListStore *list_store;
    GtkTreeIter iter, sort_iter;
    ThemeConvData *conv;

    list_store = GTK_LIST_STORE (gtk_tree_model_sort_get_model (GTK_TREE_MODEL_SORT (store)));

    conv = g_object_get_data (G_OBJECT(list), THEME_DATA);
    gtk_list_store_insert_with_values (list_store, &iter, 0,
                                       COL_LABEL, curr_value,
                                       COL_NAME, curr_value,
                                       COL_THUMBNAIL, conv->thumbnail,
                                       -1);
    /* convert the tree store iter for use with the sort model */
    gtk_tree_model_sort_convert_child_iter_to_iter (GTK_TREE_MODEL_SORT (store),
                                                    &sort_iter, &iter);
    path = gtk_tree_model_get_string_from_iter (store, &sort_iter);

    create_thumbnail (curr_value, conv->thumbnail, conv->data);
  }
  /* select the new gsettings theme in treeview */
  GtkTreeSelection *selection = gtk_tree_view_get_selection (list);
  GtkTreePath *treepath = gtk_tree_path_new_from_string (path);
  gtk_tree_selection_select_path (selection, treepath);
  gtk_tree_view_scroll_to_cell (list, treepath, NULL, FALSE, 0, 0);
  gtk_tree_path_free (treepath);
}
Beispiel #18
0
const char* cardtree_find_ext(cardtree_t* ct, GtkTreeIter* iter, 
			      const char* t_node, const char *t_id)
{
  gboolean leaf;
  gchar* node;
  gchar* id;
  GtkTreeIter child;
  int match;
  const char * retval;

  do {
    /* check item */
    gtk_tree_model_get(GTK_TREE_MODEL(ct->_store),iter,
	  	       C_LEAF,&leaf,
	  	       C_NODE,&node,
	  	       C_ID,&id,
	  	       -1);

    if ((t_node==NULL || (node && strcmp(t_node,node)==0)) &&
	(t_id==NULL || (id && strcmp(t_id,id)==0)))
      match = 1;
    else
      match = 0;
    if (node) g_free(node);
    if (id) g_free(id);

    if (match)
    {
      cardtree_clear_tmpstr(ct);
      ct->_tmpstr = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(ct->_store),iter);
      return ct->_tmpstr;
    }
    /* check children */
    if (gtk_tree_model_iter_children(GTK_TREE_MODEL(ct->_store),&child,iter)!=FALSE)
    {
      retval = cardtree_find_ext(ct,&child,t_node,t_id);
      if (retval) return retval;
    }
  } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(ct->_store),iter)!=FALSE);
  return NULL;
}
Beispiel #19
0
static void user_install_treeview_select_row(GtkTreeSelection *selection, gpointer data)
{
	GtkTreeIter iter;
	GtkTreeModel *model;
	gchar* pathString;
	gint row = -1;
	GtkNotebook *notebook;

	notebook = (GtkNotebook*)data;

	if (!gtk_tree_selection_get_selected (selection, &model, &iter)) return;
	pathString =gtk_tree_model_get_string_from_iter(model, &iter);
	if(strstr(pathString,":"))
	{
		gchar* t = strstr(pathString,":")+1;
		row = 1 + atoi(t);
	}
	else row = 0;
	if(row>=0) gtk_notebook_set_current_page(notebook, row);

}
Beispiel #20
0
void icon_view_item_select(GtkIconView *icon_view, GtkTreePath *path, gpointer userdata)
{
    GtkTreeModel *model;
    GtkNotebook *notebook;
    GtkTreeIter iter; 
    notebook = GTK_NOTEBOOK(userdata);
    model = gtk_icon_view_get_model(icon_view);
    gtk_tree_model_get_iter(model, &iter, path);
    char *string;
    string = gtk_tree_model_get_string_from_iter(model, &iter);
    printf("current select string is %s\n", string);
    int n = atoi(string);
    if(n == 0)
    {
        gtk_notebook_set_current_page(notebook, n+1);
    }
    if(n == 1)
    {
        gtk_notebook_set_current_page(notebook, n+1);
    }
}
Beispiel #21
0
static void
adblock_ui_edit_cb (GtkButton *button,
                    AdblockUI *dialog)
{
  GtkTreeModel *model;
  GtkTreeIter iter;
  GtkTreeSelection *selection;

  selection = dialog->priv->selection;

  if (gtk_tree_selection_get_selected (selection, &model, &iter))
    {
      char* path = gtk_tree_model_get_string_from_iter (model, &iter);
      GtkTreePath* tree_path = gtk_tree_path_new_from_string (path);
      GtkTreeView *treeview = dialog->priv->treeview;
      GtkTreeViewColumn *column = gtk_tree_view_get_column (treeview,
                                                            COL_FILTER_URI);

      gtk_tree_view_set_cursor (treeview, tree_path, column, TRUE);
      gtk_tree_path_free (tree_path);
      g_free (path);
    }
}
Beispiel #22
0
int internal_cardtree_from_xml_file(cardtree_t *ct, GtkTreeIter *parent, FILE* F)
{
  /* quick and dirty, absolutely no checking ! */
  GtkTreeIter child;
  a_string_t *atr;
  a_string_t *elt;
  int retval = XML_ERROR;
  char *debug_msg;
  int in_element;
    
  elt = a_strnew(NULL);
  atr = a_strnew(NULL);

  while (!ferror(F))
  {
    in_element = TOK_TEXT;
    if (get_next_xml_token(F,elt,&in_element)!=XML_OK) goto clean_up;

    if (in_element==TOK_END)
    {
      retval = XML_OK;
      goto clean_up;
    }
    else if (a_strequal(elt,"<node"))
    {
      gtk_tree_store_append (ct->_store, &child, parent);
      gtk_tree_store_set (ct->_store, &child,
  			  C_LEAF, 0,
  			  -1);
      for (;;)
      {
	if (get_next_xml_token(F,elt,&in_element)!=XML_OK) goto clean_up;

	if (in_element != TOK_ATTRIBUTE) break;

	if (assert_next_xml_token(F,atr,&in_element,"=")!=XML_OK) goto clean_up;

	if (get_next_xml_token(F,atr,&in_element)!=XML_OK) goto clean_up;
	if (in_element != TOK_STRING) goto clean_up;

	if (a_strequal(elt,"name"))
	{
	  gtk_tree_store_set (ct->_store, &child,
			      C_NODE, a_strval(atr),
			      -1);
	}
	else if (a_strequal(elt,"id")) 
	{
	  gtk_tree_store_set (ct->_store, &child,
			      C_ID, a_strval(atr),
			      -1);
	}
	else if (a_strequal(elt,"length"))
	{
	  gtk_tree_store_set (ct->_store, &child,
			      C_LENGTH, a_strval(atr),
			      -1);
	}
	else if (a_strequal(elt,"comment"))
	{
	  gtk_tree_store_set (ct->_store, &child,
			      C_COMMENT, a_strval(atr),
			      -1);
	}
	else
	{
	  log_printf(LOG_ERROR,"Unexpected XML attribute '%s'",a_strval(elt));
	  retval = XML_ERROR;
	  goto clean_up;
	}
      }

      cardtree_create_markup(ct,&child);

      if (!a_strequal(elt,"/>")) 
      {
	if (!a_strequal(elt,">"))
	{
	  log_printf(LOG_ERROR,"Expected '>' or '/>'");
	  goto clean_up;
	}
	retval = internal_cardtree_from_xml_file(ct,&child,F);
	if (retval!=XML_OK) goto clean_up;
	/*if (assert_next_xml_token(F,elt,&in_element,"</node>")!=XML_OK) goto clean_up;*/
      }
    }
    else if (a_strequal(elt,"<data"))
    {
      gtk_tree_store_append (ct->_store, &child, parent);
      gtk_tree_store_set (ct->_store, &child,
  			  C_LEAF, 1,
  			  -1);

      if (get_next_xml_token(F,elt,&in_element)!=XML_OK) goto clean_up;
      if (a_strequal(elt,"/>")) continue;
      if (!a_strequal(elt,">"))
      {
	log_printf(LOG_ERROR,"Expected '>' or '/>'");
	goto clean_up;
      }
      if (get_next_xml_token(F,elt,&in_element)!=XML_OK) goto clean_up;
      if (in_element!=TOK_TEXT) 
      {
	log_printf(LOG_ERROR,"Expected text inside <data>...</data>, got %s instead.",
	     a_strval(elt));
	goto clean_up;
      }
      gtk_tree_store_set (ct->_store, &child,
	  		  C_NODE, a_strval(elt),
	  		  -1);
      cardtree_create_markup(ct,&child);
      if (assert_next_xml_token(F,elt,&in_element,"</>")!=XML_OK) goto clean_up;
    }
    else if (a_strequal(elt,"<cardtree"))
    {
      if (parent!=NULL)
      {
	log_printf(LOG_ERROR,"XML ERROR - cardtree must be root element");
	goto clean_up;
      }
      if (get_next_xml_token(F,elt,&in_element)!=XML_OK) goto clean_up;
      if (a_strequal(elt,"/>"))
      {
	retval = XML_OK;
	goto clean_up;
      }
      if (!a_strequal(elt,">"))
      {
	log_printf(LOG_ERROR,"Expected '>' or '/>'");
	goto clean_up;
      }
      retval = internal_cardtree_from_xml_file(ct,NULL,F);
      if (retval!=XML_OK) goto clean_up;
      /*retval = assert_next_xml_token(F,elt,&in_element,"</cardtree>");*/
      goto clean_up;
    }
    else if (in_element==TOK_INSTRUCTION)
    {
      /* NOP */
    }
    else
    {
      log_printf(LOG_ERROR,"Syntax error : %s",a_strval(elt));
      retval = XML_ERROR;
      goto clean_up;
    }
  }
  
  log_printf(LOG_ERROR,"Unexpected end-of-file or error in XML");
  retval = XML_ERROR;

clean_up:
  if (retval==XML_ERROR)
  {
    if (parent)
    {
      debug_msg = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(ct->_store),parent);
      log_printf(LOG_ERROR,"Error in path '%s'",debug_msg);
      g_free(debug_msg);
    }
    else
      log_printf(LOG_ERROR,"Error in root");
  }
  a_strfree(atr);
  a_strfree(elt);
  return retval;
}
Beispiel #23
0
gint
drag_received (GtkWidget* widget, GdkDragContext* drag_context, gint x, gint y, GtkSelectionData* data, guint info, guint time, gpointer user_data)
{
	// this receives drops for the whole window.

	if(!data || data->length < 0){ perr("no data!\n"); return -1; }

	dbg(1, "%s", data->data);

	if(g_str_has_prefix((char*)data->data, "colour:")){

		char* colour_string = (char*)data->data + 7;
		unsigned colour_index = atoi(colour_string) ? atoi(colour_string) - 1 : 0;

		// which row are we on?
		GtkTreePath* path;
		GtkTreeIter iter;
		gint tx, treeview_top;
		gdk_window_get_position(app->libraryview->widget->window, &tx, &treeview_top);
		dbg(2, "treeview_top=%i", y);

#ifdef HAVE_GTK_2_12
		gint bx, by;
		gtk_tree_view_convert_widget_to_bin_window_coords(GTK_TREE_VIEW(app->libraryview->widget), x, y - treeview_top, &bx, &by);
		dbg(2, "coords: %dx%d => %dx%d", x, y, bx, by);

#else
		gint by = y - treeview_top - 20;
#endif

#ifdef USE_GDL
		GdkWindow* top_window = gdk_window_get_toplevel(gtk_widget_get_toplevel(app->libraryview->widget)->window);
		GdkWindow* window = app->libraryview->widget->window;
		while((window = gdk_window_get_parent(window)) != top_window){
			gint x0, y0;
			gdk_window_get_position(window, &x0, &y0);
			by -= y0;
		}
#endif

    if(gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(app->libraryview->widget), x, by, &path, NULL, NULL, NULL)){

      gtk_tree_model_get_iter(GTK_TREE_MODEL(samplecat.store), &iter, path);
      gchar* path_str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(samplecat.store), &iter);
      dbg(2, "path=%s y=%i final_y=%i", path_str, y, y - treeview_top);

      listview_item_set_colour(path, colour_index);

      gtk_tree_path_free(path);
    }
    else dbg(0, "path not found.");

    return FALSE;
  }

  if(info == GPOINTER_TO_INT(GDK_SELECTION_TYPE_STRING)) printf(" type=string.\n");

  if(info == GPOINTER_TO_INT(TARGET_URI_LIST)){
    dbg(1, "type=uri_list. len=%i", data->length);
    GList* list = uri_list_to_glist((char*)data->data);
    if(g_list_length(list) < 1) pwarn("drag drop: uri list parsing found no uri's.\n");
    int i = 0;
    ScanResults result = {0,};
    GList* l = list;
#ifdef __APPLE__
    gdk_threads_enter();
#endif
    for(;l;l=l->next){
      char* u = l->data;

      gchar* method_string;
      vfs_get_method_string(u, &method_string);
      dbg(2, "%i: %s method=%s", i, u, method_string);

      if(!strcmp(method_string, "file")){
        //we could probably better use g_filename_from_uri() here
        //http://10.0.0.151/man/glib-2.0/glib-Character-Set-Conversion.html#g-filename-from-uri
        //-or perhaps get_local_path() from rox/src/support.c

        char* uri_unescaped = vfs_unescape_string(u + strlen(method_string) + 1, NULL);

        char* uri = (strstr(uri_unescaped, "///") == uri_unescaped) ? uri_unescaped + 2 : uri_unescaped;

        if(do_progress(0,0)) break;
        if(is_dir(uri)) application_add_dir(uri, &result);
        else application_add_file(uri, &result);

        g_free(uri_unescaped);
      }
      else pwarn("drag drop: unknown format: '%s'. Ignoring.\n", u);
      i++;
    }
    hide_progress();
#ifdef __APPLE__
    gdk_threads_leave();
#endif

    statusbar_print(1, "import complete. %i files added", result.n_added);

    uri_list_free(list);
  }

  return FALSE;
}
Beispiel #24
0
list_item_t *list_search_text(list_t *list, char *text, int from_start, int info_only, int case_sensitive)
{
  list_item_t *cur = NULL;
  gboolean good = FALSE;
  GtkTreeIter iter;
  char text_buf[strlen(text)+1];
  int column0;
  int found;

  //fprintf(stderr, "-- SEARCH text='%s' info=%d\n", text, info_only);

  /* Find where the search should start from */
  if ( list->search_path != NULL ) {
    /* Get path of previous successful search */
    gtk_tree_model_get_iter(GTK_TREE_MODEL(list->store), &iter, list->search_path);

    /* Remove search result highlighting */
    gtk_list_store_set(list->store, &iter,
		       LIST_LINENO_BACKGROUND, NULL,
		       -1);

    list_search_clear(list);
 
    /* Get next row. If end reached, wrap to first row */
    good = gtk_tree_model_iter_next(GTK_TREE_MODEL(list->store), &iter);
    if ( ! good )
      from_start = 1;
  }
  else {
    from_start = 1;
  }

  if ( from_start ) {
    good = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(list->store), &iter);
  }

  /* Return now if no valid start row found */
  if ( ! good )
    return NULL;

  /* Make all chars capitals if search is not case sensitive */
  if ( ! case_sensitive ) {
    strcpy(text_buf, text);
    text = strupper(text_buf);
  }

  /* Search for text in Log list */
  column0 = info_only ? LIST_INFO : LIST_DATE;
  found = 0;
  while ( good && (!found) ) {
    int column;
    char *str;

    str = gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(list->store), &iter);
    g_free(str);

    for (column = column0; (column <= LIST_INFO) && (!found); column++) {
      gtk_tree_model_get(GTK_TREE_MODEL(list->store), &iter,
			 column, &str,
			 -1);
      if ( strstr2(str, text, case_sensitive) != NULL )
	found = 1;
    }

    if ( ! found )
      good = gtk_tree_model_iter_next(GTK_TREE_MODEL(list->store), &iter);
  }

  if ( found ) {
    gtk_list_store_set(list->store, &iter,
		       LIST_LINENO_BACKGROUND, "black",
		       -1);

    if ( ! row_is_visible(list->tree, &iter) )
      scroll_to_row(list->tree, &iter);

    list->search_path = gtk_tree_model_get_path(GTK_TREE_MODEL(list->store), &iter);
  }

  return cur;
}
void nsgtk_history_update_info(GtkTreeSelection *treesel, gboolean domain)
{
	GtkTreeIter iter;
	GtkTreeModel *model;
	gboolean has_selection;

	has_selection = gtk_tree_selection_get_selected(treesel, &model, &iter);		
	
	if (has_selection && domain) {
		gchar *b;
		gint i;
		char buf[20];
		gboolean all = g_str_equal(gtk_tree_model_get_string_from_iter(
							model, &iter), "0");
		
						/* Address */
		gtk_tree_model_get(model, &iter, DOM_DOMAIN, &b, -1);
		gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeFile,
						"labelHistoryAddress")),
						 all ? "-" : b);
		g_free(b);
						/* Last Visit */
		gtk_tree_model_get(model, &iter, DOM_LASTVISIT, &i, -1);
		gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeFile,
						"labelHistoryLastVisit")),
						 nsgtk_history_date_parse(i));
						
						/* Total Visits */
		gtk_tree_model_get(model, &iter, DOM_TOTALVISITS, &i, -1);
		snprintf(buf, 20, "%d", i);
		gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeFile,
						"labelHistoryVisits")),
						 buf);
	} else if (has_selection){
		GdkPixbuf *thumb;
		gchar *b;
		gint i;
		char buf[20];
						/* Address */
		gtk_tree_model_get(model, &iter, SITE_ADDRESS, &b, -1);
		gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeFile,
						"labelHistoryAddress")), b);
		g_free(b);
						/* Last Visit */
		gtk_tree_model_get(model, &iter, SITE_LASTVISIT, &i, -1);
		gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeFile,
						"labelHistoryLastVisit")),
						nsgtk_history_date_parse(i));
						
						/* Total Visits */
		gtk_tree_model_get(model, &iter, SITE_TOTALVISITS, &i, -1);
		snprintf(buf, 20, "%d", i);
		gtk_label_set_text(GTK_LABEL(glade_xml_get_widget(gladeFile,
						"labelHistoryVisits")), buf);

		gtk_tree_model_get(model, &iter, SITE_THUMBNAIL, &thumb, -1);
		gtk_image_set_from_pixbuf(GTK_IMAGE(
					glade_xml_get_widget(gladeFile,
					"imageThumbnail")), thumb);
		g_object_set(G_OBJECT(glade_xml_get_widget(
					gladeFile, "imageFrame")),
					"visible", (bool)thumb, NULL);		
	}
}