static GtkTreeIter *
photos_organize_collection_model_find_collection_iter (PhotosOrganizeCollectionModel *self,
                                                       PhotosBaseItem *collection)
{
  PhotosOrganizeCollectionModelPrivate *priv = self->priv;

  gtk_tree_model_foreach (GTK_TREE_MODEL (self), photos_organize_collection_model_foreach, collection);
  if (priv->coll_path != NULL)
    {
      GtkTreeIter iter;

      gtk_tree_model_get_iter (GTK_TREE_MODEL (self), &iter, priv->coll_path);
      g_clear_pointer (&priv->coll_path, (GDestroyNotify) gtk_tree_path_free);
      return gtk_tree_iter_copy (&iter);
    }

  return NULL;
}
static FilterResultCallbackData *
filter_result_callback_data_new (EmpathyAccountChooser *self,
    TpAccount *account,
    GtkTreeIter *iter)
{
  FilterResultCallbackData *data;

  g_return_val_if_fail (self != NULL, NULL);
  g_return_val_if_fail (account != NULL, NULL);
  g_return_val_if_fail (iter != NULL, NULL);

  data = g_slice_new0 (FilterResultCallbackData);
  data->self = g_object_ref (self);
  data->account = g_object_ref (account);
  data->iter = gtk_tree_iter_copy (iter);

  return data;
}
/*
 * Allocates a GtkTreeIter by calling the boxed's _copy() function on a local
 * struct variable. By definition, a "boxed" is a struct. Local variables, of
 * course, all have local storage on the stack. So with the & operater you
 * can pass them to a function that takes a pointer so it can modify them; in
 * our usage we need one in pointer form so use gtk_tree_iter_copy() to get
 * us one in a manner that will be safely released by a later call to
 * gtk_tree_iter_free().
 */
JNIEXPORT jlong JNICALL
Java_org_gnome_gtk_GtkTreeIterOverride_gtk_1tree_1iter_1new
(
	JNIEnv* env,
	jclass cls
)
{
	GtkTreeIter blank = { 0, };
	GtkTreeIter* result;
	
	// blank is allocated locally on the stack

	// copy blank
	result = gtk_tree_iter_copy(&blank);

	// and finally
	return (jlong) result;
}
示例#4
0
static void
gimp_int_store_add_empty (GimpIntStore *store)
{
  GtkTreeIter iter = { 0, };

  g_return_if_fail (store->empty_iter == NULL);

  gtk_list_store_prepend (GTK_LIST_STORE (store), &iter);
  gtk_list_store_set (GTK_LIST_STORE (store), &iter,
                      GIMP_INT_STORE_VALUE, -1,
                      /* This string appears in an empty menu as in
                       * "nothing selected and nothing to select"
                       */
                      GIMP_INT_STORE_LABEL, (_("(Empty)")),
                      -1);

  store->empty_iter = gtk_tree_iter_copy (&iter);
}
示例#5
0
static void
manager_active_changed_cb (LogviewManager *manager,
                           LogviewLog *log,
                           LogviewLog *old_log,
                           gpointer user_data)
{
  LogviewLoglist *list = user_data;
  GtkTreeIter * iter, sel_iter;
  GtkTreeSelection * selection;

  if (list->priv->selection && 
      gtk_tree_model_get_iter (GTK_TREE_MODEL (list->priv->model),
                               &sel_iter, list->priv->selection))
  {
    Day *day;

    iter = gtk_tree_iter_copy (&sel_iter);

    gtk_tree_model_get (GTK_TREE_MODEL (list->priv->model), iter,
                        LOG_DAY, &day, -1);

    if (day) {
      g_signal_emit (list, signals[DAY_SELECTED], 0, day, NULL);
    }

    gtk_tree_path_free (list->priv->selection);
    list->priv->selection = NULL;
  } else {
    iter = logview_loglist_find_log (list, log);
  }

  if (!iter) {
    return;
  }

  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
  g_signal_handlers_block_by_func (selection, tree_selection_changed_cb, list);

  gtk_tree_selection_select_iter (selection, iter);

  g_signal_handlers_unblock_by_func (selection, tree_selection_changed_cb, list);
  gtk_tree_iter_free (iter);
}
示例#6
0
void move_down (GtkButton *button, gpointer user_data)
{
	GtkTreeIter first_iter, *second_iter;
	GtkTreeSelection *selected;
	Widgets *widgets = (Widgets*)user_data;
	
	selected = gtk_tree_view_get_selection (widgets->tree);
	if(selected == NULL)
	{
		return 0;
	}
	gtk_tree_selection_get_selected (selected, NULL, &first_iter);
	//gtk_tree_store_remove (store, &first_iter);
	second_iter = gtk_tree_iter_copy (&first_iter);
	if(gtk_tree_model_iter_next (widgets->store, second_iter))
	{
		gtk_tree_store_swap (widgets->store, &first_iter, second_iter);
	}
}
示例#7
0
static GtkTreeIter *
history_dialog_add_host_item (HistoryDialog *dialog, 
			      HistoryItem *item)
{
	GtkTreeIter iter;
	GtkTreeIter *tmp;

	if (!dialog->priv->group) return NULL;
	
	gtk_tree_store_insert (GTK_TREE_STORE (dialog->priv->model), 
                               &iter,
                               NULL,
                               0);
	
	tmp = gtk_tree_iter_copy (&iter);
	history_dialog_update_host_item (dialog, item, tmp);

	return tmp;
}
示例#8
0
gTreeRow* gTree::addRow(char *key, char *after, bool before)
{
	GtkTreeIter iter;
	GtkTreeIter *piter;
	gTreeRow *row,*aft = NULL;
	char *buf;

	if (!key)
		return NULL;
	
	if (g_hash_table_lookup (datakey,(gconstpointer)key)) return NULL;
	
	if (after)
	{
		aft=(gTreeRow*)g_hash_table_lookup (datakey,(gconstpointer)after);
		if (!aft) return NULL;	
	}
	
	piter = NULL;
	
	//fprintf(stderr, "[0]: %d %d\n", columnResizable(0), gtk_tree_view_column_get_sizing(gt_tree_view_find_column(GTK_TREE_VIEW(widget), 0)));
	
	if (aft) 
	{
		if (before)
			gtk_tree_store_insert_before(store, &iter, piter, aft->dataiter);
		else
			gtk_tree_store_insert_after(store, &iter, piter, aft->dataiter);
	}
	else
		gtk_tree_store_append (store, &iter, piter);
	
	buf = g_strdup(key); // Will be freed by ~gTreeRow()
	
	row = new gTreeRow(this, buf, gtk_tree_iter_copy(&iter));
	
	g_hash_table_insert(datakey, (gpointer)buf, (gpointer)row);
	gtk_tree_store_set(store, &iter, 1, buf, -1);
	
	//fprintf(stderr, "[0]: -> %d %d\n", columnResizable(0), gtk_tree_view_column_get_sizing(gt_tree_view_find_column(GTK_TREE_VIEW(widget), 0)));

	return row;
}
示例#9
0
GtkTreeIter *keyword_add_from_config(GtkTreeStore *keyword_tree, GtkTreeIter *parent, const gchar **attribute_names, const gchar **attribute_values)
{
	gchar *name = NULL;
	gboolean is_kw = TRUE;
	gchar *mark_str = NULL;

	while (*attribute_names)
		{
		const gchar *option = *attribute_names++;
		const gchar *value = *attribute_values++;

		if (READ_CHAR_FULL("name", name)) continue;
		if (READ_BOOL_FULL("kw", is_kw)) continue;
		if (READ_CHAR_FULL("mark", mark_str)) continue;

		log_printf("unknown attribute %s = %s\n", option, value);
		}
	if (name && name[0])
		{
		GtkTreeIter iter;
		/* re-use existing keyword if any */
		if (!keyword_exists(GTK_TREE_MODEL(keyword_tree), parent, NULL, name, FALSE, &iter))
			{
			gtk_tree_store_append(keyword_tree, &iter, parent);
			}
		keyword_set(keyword_tree, &iter, name, is_kw);

		if (mark_str)
			{
			gint i = (gint)atoi(mark_str);
			if (i == 0) i = 10;

			meta_data_connect_mark_with_keyword(GTK_TREE_MODEL(keyword_tree),
											&iter, i - 1);
			}

		g_free(name);
		return gtk_tree_iter_copy(&iter);
		}
	g_free(name);
	return NULL;
}
static void
photos_organize_collection_model_fetch_collection_state_executed (GHashTable *collection_state, gpointer user_data)
{
  PhotosOrganizeCollectionModel *self = PHOTOS_ORGANIZE_COLLECTION_MODEL (user_data);
  GHashTableIter collection_state_iter;
  const gchar *idx;
  gpointer value;

  photos_organize_collection_model_remove_placeholder (self);

  g_hash_table_iter_init (&collection_state_iter, collection_state);
  while (g_hash_table_iter_next (&collection_state_iter, (gpointer) &idx, (gpointer) &value))
    {
      GtkTreeIter *iter;
      PhotosBaseItem *collection;
      gint state = GPOINTER_TO_INT (value);

      if (state & PHOTOS_COLLECTION_STATE_HIDDEN)
        continue;

      collection = PHOTOS_BASE_ITEM (photos_base_manager_get_object_by_id (self->priv->manager, idx));
      iter = photos_organize_collection_model_find_collection_iter (self, collection);
      if (iter == NULL)
        {
          GtkTreeIter tmp;

          gtk_list_store_append (GTK_LIST_STORE (self), &tmp);
          iter = gtk_tree_iter_copy (&tmp);
        }

      gtk_list_store_set (GTK_LIST_STORE (self),
                          iter,
                          PHOTOS_ORGANIZE_MODEL_ID, idx,
                          PHOTOS_ORGANIZE_MODEL_NAME, photos_base_item_get_name (collection),
                          PHOTOS_ORGANIZE_MODEL_STATE, state,
                          -1);
      gtk_tree_iter_free (iter);
    }

  g_object_unref (self);
}
示例#11
0
static void
add_child (GtkTreeStore   *store,
           GimpHelpDomain *domain,
           GimpHelpLocale *locale,
           GtkTreeIter    *parent,
           GimpHelpItem   *item,
           gint            depth)
{
  GtkTreeIter  iter;
  GList       *list;
  gchar       *uri;

  gtk_tree_store_append (store, &iter, parent);

  gtk_tree_store_set (store, &iter,
                      0, item,
                      1, item->title,
                      -1);

  uri = g_strconcat (domain->help_uri,  "/",
                     locale->locale_id, "/",
                     item->ref,
                     NULL);

  g_hash_table_insert (uri_hash_table,
                       uri,
                       gtk_tree_iter_copy (&iter));

  if (depth + 1 == GIMP_HELP_BROWSER_INDEX_MAX_DEPTH)
    return;

  item->children = g_list_sort (item->children, help_item_compare);

  for (list = item->children; list; list = g_list_next (list))
    {
      GimpHelpItem *item = list->data;

      add_child (store, domain, locale, &iter, item, depth + 1);
    }
}
示例#12
0
static GtkTreeIter *
history_dialog_find_host_iter (HistoryDialog *dialog,
			       HistoryItem *item)
{
	GtkTreeIter iter;
	
	if (gtk_tree_model_get_iter (dialog->priv->model, &iter,
				     gtk_tree_path_new_first()) == TRUE)
	{
		do {
			GValue val = { 0, }; 
			HistoryItem *i;
			gtk_tree_model_get_value (dialog->priv->model, 
						  &iter, 5, &val);
			i = (HistoryItem *) g_value_get_pointer (&val);
			if (i == item) return gtk_tree_iter_copy (&iter); 
		}
		while (gtk_tree_model_iter_next (dialog->priv->model, &iter));
	}

	return NULL;
}
示例#13
0
static GtkTreeIter *
get_row_by_type (GtkTreeModel *model, PangoAttrType type)
{
  GtkTreeIter iter, *ret_iter = NULL;
  gboolean valid;
  PangoAttrType iter_type;

  valid = gtk_tree_model_iter_children (model, &iter, NULL);

  while (valid)
    {
      gtk_tree_model_get (model, &iter, COLUMN_TYPE, &iter_type, -1);

      if (iter_type == type)
        {
          ret_iter = gtk_tree_iter_copy (&iter);
          break;
        }
      valid = gtk_tree_model_iter_next (model, &iter);
    }
  return ret_iter;
}
示例#14
0
char *gTreeRow::parent()
{
	GtkTreeIter *iter = gtk_tree_iter_copy(dataiter);
	char *key;
	//GtkTreePath* path;
	
	if (!gtk_tree_model_iter_parent(GTK_TREE_MODEL(tree->store), iter, dataiter))
		key = NULL;
	else
		key = tree->iterToKey(iter);
	
	gtk_tree_iter_free(iter);
	return key;
	
	/*path = gtk_tree_model_get_path(GTK_TREE_MODEL(tree->store), dataiter);
	if (!path)
		return NULL;
	
	if (!gtk_tree_path_up(path))
		return NULL;
		
	return tree->pathToKey(path);*/
}
示例#15
0
static gboolean
contact_list_store_find_contact_foreach (GtkTreeModel *model,
					 GtkTreePath  *path,
					 GtkTreeIter  *iter,
					 FindContact  *fc)
{
	EmpathyContact *contact;

	gtk_tree_model_get (model, iter,
			    EMPATHY_CONTACT_LIST_STORE_COL_CONTACT, &contact,
			    -1);

	if (contact == fc->contact) {
		fc->found = TRUE;
		fc->iters = g_list_append (fc->iters, gtk_tree_iter_copy (iter));
	}

	if (contact) {
		g_object_unref (contact);
	}

	return FALSE;
}
示例#16
0
static void device_changed (GtkTreeModel *model,
			     GtkTreePath  *path,
			     GtkTreeIter  *_iter,
			     gpointer      data)
{
	GtkTreeIter iter, *default_iter;
	gboolean powered, cont;

	default_iter = NULL;
	num_adapters_present = num_adapters_powered = 0;

	cont = gtk_tree_model_get_iter_first (model, &iter);
	while (cont) {
		gboolean is_default;

		num_adapters_present++;

		gtk_tree_model_get (model, &iter,
				    BLUETOOTH_COLUMN_DEFAULT, &is_default,
				    BLUETOOTH_COLUMN_POWERED, &powered,
				    -1);
		if (powered)
			num_adapters_powered++;
		if (is_default && powered)
			default_iter = gtk_tree_iter_copy (&iter);

		cont = gtk_tree_model_iter_next (model, &iter);
	}

	update_discoverability (default_iter);
	update_icon_visibility ();
	update_menu_items ();
	update_device_list (default_iter);

	if (default_iter != NULL)
		gtk_tree_iter_free (default_iter);
}
示例#17
0
static GtkTreeIter *
logview_loglist_find_log (LogviewLoglist *list, LogviewLog *log)
{
  GtkTreeIter iter;
  GtkTreeModel *model;
  GtkTreeIter *retval = NULL;
  LogviewLog *current;

  model = GTK_TREE_MODEL (list->priv->model);

  if (!gtk_tree_model_get_iter_first (model, &iter)) {
    return NULL;
  }

  do {
    gtk_tree_model_get (model, &iter, LOG_OBJECT, &current, -1);
    if (current == log) {
      retval = gtk_tree_iter_copy (&iter);
    }
    g_object_unref (current);
  } while (gtk_tree_model_iter_next (model, &iter) != FALSE && retval == NULL);

  return retval;
}
示例#18
0
static GtkTreeIter *
history_dialog_find_site_iter (HistoryDialog *dialog,
			       GtkTreeIter *host_iter,
			       HistoryItem *item)
{
	GtkTreeIter iter;
	
	gtk_tree_model_iter_children (dialog->priv->model,
				      &iter,
				      host_iter);

	do
	{
		GValue val = { 0, }; 
		HistoryItem *i;
		gtk_tree_model_get_value (dialog->priv->model, 
					  &iter, 5, &val);
		i = (HistoryItem *) g_value_get_pointer (&val);
		if (i == item) return gtk_tree_iter_copy (&iter); 
	}
	while (gtk_tree_model_iter_next (dialog->priv->model, &iter));
	
	return NULL;
}
示例#19
0
static void
on_down_clicked( GtkButton *button, BaseWindow *window )
{
	GtkTreeView *treeview;
	GtkTreeSelection *selection;
	GtkTreeModel *model;
	GtkTreeIter iter_selected;
	GtkTreeIter *iter_next;
	GtkTreePath *path_next;

	treeview = GTK_TREE_VIEW( g_object_get_data( G_OBJECT( window ), PROVIDERS_LIST_TREEVIEW ));
	selection = gtk_tree_view_get_selection( treeview );
	if( gtk_tree_selection_get_selected( selection, &model, &iter_selected )){
		iter_next = gtk_tree_iter_copy( &iter_selected );
		if( gtk_tree_model_iter_next( model, iter_next )){
			path_next = gtk_tree_model_get_path( model, iter_next );
			gtk_list_store_move_after( GTK_LIST_STORE( model ), &iter_selected, iter_next );
			gtk_tree_selection_unselect_all( selection );
			gtk_tree_selection_select_path( selection, path_next );
			gtk_tree_path_free( path_next );
		}
		gtk_tree_iter_free( iter_next );
	}
}
示例#20
0
static gboolean
classify_openfiles (GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer data)
{
    GHashTable *new_maps = static_cast<GHashTable*>(data);
    GtkTreeIter *old_iter;
    glibtop_open_files_entry *openfiles;
    gchar *old_name;

    gtk_tree_model_get (model, iter, 1, &old_name, -1);

    openfiles = static_cast<glibtop_open_files_entry*>(g_hash_table_lookup (new_maps, old_name));
    if (openfiles) {
        g_hash_table_remove (new_maps, old_name);
        g_free (old_name);
        return FALSE;

    }

    old_iter = gtk_tree_iter_copy (iter);
    old_maps = g_list_append (old_maps, old_iter);
    g_free (old_name);
    return FALSE;

}
static gpointer
pboditer_copy_cb(gpointer boxed)
{
	return gtk_tree_iter_copy ((GtkTreeIter*)boxed);
}
示例#22
0
GtkTreeIter *
gtk_adds_tree_iter_new ()
{
  GtkTreeIter example;
  return gtk_tree_iter_copy(&example);
}
示例#23
0
文件: eina-muine.c 项目: maop/eina
static void
muine_update(EinaMuine *self)
{
    g_return_if_fail(EINA_IS_MUINE(self));
    EinaMuinePrivate *priv = self->priv;

    typedef struct {
        guint count;           // How many items have been folded
        gchar *artist, *album; // Metadata from DB
        LomoStream *stream;    // Fake stream
    } data_set_t;

    EinaMuineMode mode = eina_muine_get_mode(self);
    gchar *markup_fmt = NULL;

    // Build master query
    gchar *q = NULL;
    switch (mode)
    {
    case EINA_MUINE_MODE_ALBUM:
        // q = "select count(*) as count,artist,album from fast_meta group by(lower(album)) order by artist ASC";
        q = "select count(*) as count,artist,album from fast_meta group by(album) order by lower(artist) ASC";
        markup_fmt = "<big><b>%s</b></big>\n%s <span size=\"small\" weight=\"light\">(%d streams)</span>";
        break;
    case EINA_MUINE_MODE_ARTIST:
        // q = "select count(*) as count,artist,NULL from fast_meta group by(lower(artist)) order by artist ASC";
        q = "select count(*) as count,artist,NULL from fast_meta group by(artist) order by lower(artist) ASC";
        markup_fmt = "<big><b>%s</b></big>\n<span size=\"small\" weight=\"light\">(%d streams)</span>";
        break;
    default:
        g_warning(N_("Unknow mode: %d"), mode);
        return;
    }

    // Now fill the data_store;
    EinaAdbResult *r = eina_adb_query(eina_muine_get_adb(self), q, NULL);

    GList *db_data = NULL;
    data_set_t *ds = NULL;
    while (eina_adb_result_step(r))
    {
        if (ds == NULL)
            ds = g_new0(data_set_t, 1);

        eina_adb_result_get(r,
                            0, G_TYPE_UINT,   &(ds->count),
                            1, G_TYPE_STRING, &(ds->artist),
                            2, G_TYPE_STRING, &(ds->album),
                            -1);

        db_data = g_list_prepend(db_data, ds);
        ds = NULL;
    }
    g_object_unref(r);

    // Try to get a sample for each item
    // q = "select uri from streams where sid = (select sid from fast_meta where lower(%s)=lower('%q') limit 1 offset %d)";
    q = "select uri from streams where sid = (select sid from fast_meta where %s='%q' limit 1 offset %d)";
    EinaAdb *adb      = eina_muine_get_adb(self);
    gchar *sample_uri = NULL;
    gchar *field = (mode == EINA_MUINE_MODE_ALBUM) ? "album" : "artist";
    gchar *key   = NULL;

    GList *ds_p = db_data;
    while (ds_p)
    {
        data_set_t *ds = (data_set_t *) ds_p->data;

        char *q2 = sqlite3_mprintf(q,
                                   field,
                                   key = ((mode == EINA_MUINE_MODE_ALBUM) ? ds->album : ds->artist),
                                   g_random_int_range(0, ds->count));

        EinaAdbResult *sr = eina_adb_query_raw(adb, q2);
        if (!sr || !eina_adb_result_step(sr))
        {
            g_warning(N_("Unable to fetch sample URI for %s '%s', query was %s"), field, key, q2);
            sample_uri = g_strdup("file:///nonexistent");
        }
        else
            eina_adb_result_get(sr, 0, G_TYPE_STRING, &sample_uri, -1);

        gel_free_and_invalidate(sr, NULL, g_object_unref);
        gel_free_and_invalidate(q2, NULL, sqlite3_free);

        ds->stream = lomo_stream_new(sample_uri);
        g_free(sample_uri);

        ds_p = ds_p->next;
    }

    // All data (and all I/O) from DB has been fetched, insert into interface
    gtk_list_store_clear(muine_get_model(self));
    g_hash_table_remove_all(priv->stream_iter_map);
    ds_p = db_data;
    GtkListStore *model = muine_get_model(self);
    gchar *artist = NULL, *album = NULL;
    gchar *markup = NULL;

    GValue v = { 0 };
    g_value_init(&v, G_TYPE_STRING);

    while (ds_p)
    {
        data_set_t *ds = (data_set_t *) ds_p->data;

        if (ds->artist)
        {
            artist = g_markup_escape_text(ds->artist, -1);

            g_value_set_static_string(&v, artist);
            lomo_stream_set_tag(ds->stream, LOMO_TAG_ARTIST, &v);
        }

        if (ds->album)
        {
            album  = g_markup_escape_text(ds->album,  -1);

            g_value_set_static_string(&v, album);
            lomo_stream_set_tag(ds->stream, LOMO_TAG_ALBUM, &v);
        }

        switch (mode)
        {
        case EINA_MUINE_MODE_INVALID:
        case EINA_MUINE_MODE_ALBUM:
            markup = g_strdup_printf(markup_fmt, album, artist, ds->count);
            break;
        case EINA_MUINE_MODE_ARTIST:
            markup = g_strdup_printf(markup_fmt, artist, ds->count);
            break;
        }

        static GdkPixbuf *default_pb = NULL;
        if (!default_pb) {
            GError *e = NULL;
            GInputStream *stream = gel_io_open(lomo_em_art_provider_get_default_cover(), &e);
            if (stream == NULL)
                g_error(_("Can't open `%s': %s"), lomo_em_art_provider_get_default_cover(), e->message);

            default_pb = gdk_pixbuf_new_from_stream_at_scale(stream, DEFAULT_SIZE, DEFAULT_SIZE, TRUE, NULL, NULL);
            g_input_stream_close(stream, NULL, NULL);
        }

        GtkTreeIter iter;
        gtk_list_store_insert_with_values(model, &iter, 0,
                                          COMBO_COLUMN_MARKUP, markup,
                                          COMBO_COLUMN_ID,     (mode == EINA_MUINE_MODE_ALBUM) ? ds->album : ds->artist,
                                          COMBO_COLUMN_STREAM, ds->stream,
                                          COMBO_COLUMN_ICON,   default_pb,
                                          -1);

        g_hash_table_insert(priv->stream_iter_map, ds->stream, gtk_tree_iter_copy(&iter));
        lomo_stream_set_all_tags_flag(ds->stream, TRUE);
        g_signal_connect(ds->stream, "extended-metadata-updated", (GCallback) stream_em_updated_cb, self);
        lomo_em_art_provider_init_stream(priv->art, ds->stream);

        g_free(ds->artist);
        g_free(ds->album);
        g_free(ds);
        g_free(markup);
        gel_free_and_invalidate(artist, NULL, g_free);
        gel_free_and_invalidate(album,  NULL, g_free);

        ds_p = ds_p->next;
    }
    g_value_reset(&v);
    g_list_free(db_data);
}
示例#24
0
static void
on_presentity_added (RosterViewGtk* self,
		     G_GNUC_UNUSED Ekiga::ClusterPtr cluster,
		     Ekiga::HeapPtr heap,
		     Ekiga::PresentityPtr presentity)
{
  GtkTreeIter heap_iter;
  std::set<std::string> groups = presentity->get_groups ();
  GtkTreeSelection* selection = gtk_tree_view_get_selection (self->priv->tree_view);
  GtkTreeModelFilter* filtered_model = GTK_TREE_MODEL_FILTER (gtk_tree_view_get_model (self->priv->tree_view));
  GtkTreeIter group_iter;
  GtkTreeIter iter;
  GtkTreeIter filtered_iter;
  bool active = false;
  bool away = false;
  guint timeout = 0;
  std::string status;
  gchar *old_presence = NULL;
  gboolean should_emit = FALSE;

  roster_view_gtk_find_iter_for_heap (self, heap, &heap_iter);

  active = presentity->get_presence () != "offline";
  away = presentity->get_presence () == "away";

  if (groups.empty ())
    groups.insert (_("Unsorted"));

  for (std::set<std::string>::const_iterator group = groups.begin ();
       group != groups.end ();
       group++) {

    roster_view_gtk_find_iter_for_group (self, heap, &heap_iter,
					 *group, &group_iter);
    roster_view_gtk_find_iter_for_presentity (self, &group_iter, presentity, &iter);

    if (gtk_tree_model_filter_convert_child_iter_to_iter (filtered_model, &filtered_iter, &iter))
      if (gtk_tree_selection_iter_is_selected (selection, &filtered_iter))
	should_emit = TRUE;

    // Find out what our presence was
    gtk_tree_model_get (GTK_TREE_MODEL (self->priv->store), &iter,
                        COLUMN_PRESENCE, &old_presence, -1);

    if (old_presence && presentity->get_presence () != old_presence
        && presentity->get_presence () != "unknown" && presentity->get_presence () != "offline"
        && (!g_strcmp0 (old_presence, "unknown") || !g_strcmp0 (old_presence, "offline"))) {

      StatusIconInfo *info = new StatusIconInfo ();
      info->model = GTK_TREE_MODEL (self->priv->store);
      info->iter = gtk_tree_iter_copy (&iter);
      info->cpt = 0;

      timeout = g_timeout_add_seconds_full (G_PRIORITY_DEFAULT, 1, roster_view_gtk_icon_blink_cb,
                                            (gpointer) info, (GDestroyNotify) status_icon_info_delete);
      gtk_tree_store_set (self->priv->store, &iter,
                          COLUMN_TIMEOUT, timeout, -1);
    }
    else {

      std::string icon = "avatar-default";
      if (!old_presence) {
        gtk_tree_store_set (self->priv->store, &iter,
                            COLUMN_PRESENCE_ICON, icon.c_str (),
                            -1);
      }
      else if (old_presence != presentity->get_presence ()) {
        if (presentity->get_presence () != "unknown")
          icon = "user-" + presentity->get_presence ();
        gtk_tree_store_set (self->priv->store, &iter,
                            COLUMN_PRESENCE_ICON, icon.c_str (),
                            -1);
      }
    }
    status = presentity->get_status ();
    if (status.empty ()) {
      if (presentity->get_presence () == "away")
        status = _("Away");
      else if (presentity->get_presence () == "available")
        status = _("Available");
      else if (presentity->get_presence () == "offline")
        status = _("Offline");
      else if (presentity->get_presence () == "busy")
        status = _("Busy");
    }
    gtk_tree_store_set (self->priv->store, &iter,
                        COLUMN_TYPE, TYPE_PRESENTITY,
                        COLUMN_OFFLINE, active,
                        COLUMN_HEAP, heap.get (),
                        COLUMN_PRESENTITY, presentity.get (),
                        COLUMN_NAME, presentity->get_name ().c_str (),
                        COLUMN_STATUS, status.c_str (),
                        COLUMN_PRESENCE, presentity->get_presence ().c_str (),
                        COLUMN_ACTIVE, (!active || away) ? "gray" : "black", -1);
    gtk_tree_model_get (GTK_TREE_MODEL (self->priv->store), &iter,
                        COLUMN_TIMEOUT, &timeout,
                        -1);

    g_free (old_presence);
  }

  GtkTreeModel* model = gtk_tree_view_get_model (self->priv->tree_view);
  gtk_tree_model_filter_refilter (GTK_TREE_MODEL_FILTER (model));

  roster_view_gtk_update_groups (self, &heap_iter);

  if (should_emit)
    g_signal_emit (self, signals[SELECTION_CHANGED_SIGNAL], 0);
}
示例#25
0
static void
gxi_update_string_box (GncXmlImportData *data)
{
    gchar *string;
    const gchar *utf8;
    GtkBox *vbox;
    GtkComboBox *combo;
    GtkListStore *store;
    GList *word_iter, *conv_iter;
    GtkCellRenderer *renderer;
    GtkTreeIter iter;
    GQuark chosen_encoding;
    GtkTreeIter *chosen_iter, *default_iter;
    ambiguous_type *amb;
    conv_type *conv;

    if (data->string_box)
        gtk_widget_destroy (data->string_box);

    data->string_box = gtk_vbox_new (FALSE, 6);
    vbox = GTK_BOX (data->string_box);

    data->n_unassigned = 0;

    /* loop through words */
    for (word_iter = data->ambiguous_list; word_iter; word_iter = word_iter->next)
    {

        store = gtk_list_store_new (WORD_NUM_COLS, G_TYPE_STRING, G_TYPE_POINTER);
        combo = GTK_COMBO_BOX (gtk_combo_box_new_with_model (
                                   GTK_TREE_MODEL (store)));
        g_object_unref (store);
        renderer = gtk_cell_renderer_text_new ();
        gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo), renderer, TRUE);
        gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo), renderer,
                                        "text", WORD_COL_STRING, NULL);

        /* add default string, if possible */
        amb = (ambiguous_type*) word_iter->data;
        utf8 = get_decoded_string (amb, data->default_encoding);
        default_iter = NULL;
        if (utf8)
        {
            string = g_strdup_printf ("%s (default)", utf8);
            gtk_list_store_append (store, &iter);
            gtk_list_store_set (store, &iter, WORD_COL_STRING, string,
                                WORD_COL_ENCODING,
                                GUINT_TO_POINTER (data->default_encoding), -1);
            g_free (string);
            default_iter = gtk_tree_iter_copy (&iter);
        }

        /* user has selected this previously */
        conv = (conv_type*) g_hash_table_lookup (data->choices, amb->byte_sequence);
        chosen_encoding = (conv) ? conv->encoding : 0;
        chosen_iter = NULL;

        /* loop through conversions */
        for (conv_iter = amb->conv_list; conv_iter; conv_iter = conv_iter->next)
        {
            conv = (conv_type*) conv_iter->data;
            string = g_strdup_printf ("%s (%s)", conv->utf8_string,
                                      g_quark_to_string (conv->encoding));
            gtk_list_store_append (store, &iter);
            gtk_list_store_set (store, &iter, WORD_COL_STRING, string,
                                WORD_COL_ENCODING,
                                GUINT_TO_POINTER (conv->encoding), -1);
            g_free (string);

            if (chosen_encoding && conv->encoding == chosen_encoding)
            {
                chosen_iter = gtk_tree_iter_copy (&iter);
            }
        } /* next conversion */

        if (chosen_iter)
        {
            /* select previous selection again, are not we cute */
            gtk_combo_box_set_active_iter (combo, chosen_iter);
            gtk_tree_iter_free (chosen_iter);
        }
        else
        {
            if (default_iter)
            {
                /* select default entry */
                gtk_combo_box_set_active_iter (combo, default_iter);
            }
            else
            {
                /* count it */
                data->n_unassigned++;
            }
        }

        /* wire up combo */
        g_object_set_data (G_OBJECT (combo), "ambiguous", amb);
        g_signal_connect (G_OBJECT (combo), "changed",
                          G_CALLBACK (gxi_string_combo_changed_cb), data);
        gtk_box_pack_start (vbox, GTK_WIDGET (combo), FALSE, FALSE, 0);
        gtk_widget_show (GTK_WIDGET (combo));

    } /* next word */

    /* wire up whole string vbox */
    gtk_container_add (GTK_CONTAINER (data->string_box_container), GTK_WIDGET (vbox));
    gtk_widget_show (GTK_WIDGET (vbox));

    /* update label now, n_unassigned is calculated */
    if (!data->summary_label)
        data->summary_label = data->impossible_label;
    gxi_update_summary_label (data);
}
static gboolean
repair_dialog_on_idle_update(GtkDialog* dialog)
{
    GtkTreeIter iter;
    GtkTreeIter* parent_iter;
    char* name;
    char* display_name;
    char* new_name;
    GFile* file;
    GFileType ftype;
    UpdateContext* context;
    gint n;
    int i;

    context = repair_dialog_get_update_context(dialog);

    if (context == NULL) {
	return FALSE;
    }

    for (i = 0; i < 500; i++) {
	if (context->file_stack == NULL) {
	    repair_dialog_set_update_context(dialog, NULL);
	    repair_dialog_on_update_end(dialog, context->success_all);
	    update_context_free(context);
	    return FALSE;
	}

	file = context->file_stack->data;

	if (context->enum_stack != NULL) {
	    GFileInfo* info;
	    GFileEnumerator* e;

	    parent_iter = context->iter_stack->data;
	    e = context->enum_stack->data;

	    info = g_file_enumerator_next_file(e, NULL, NULL);
	    if (info != NULL) {
		const char* name_const;
		name_const = g_file_info_get_name(info);
		display_name = get_display_name(name_const);
		new_name = get_new_name(name_const, context->encoding);

		file_list_model_append(context->store, &iter, parent_iter,
			NULL, name_const, display_name, new_name);
		if (new_name == NULL)
		    context->success_all = FALSE;

		ftype = g_file_info_get_file_type(info);
		if (ftype == G_FILE_TYPE_DIRECTORY) {
		    GFile* child;
		    GFileEnumerator* child_e;
		    GtkTreeIter* tmp_iter;

		    tmp_iter = gtk_tree_iter_copy(&iter);
		    child = g_file_get_child(file, name_const);
		    child_e = g_file_enumerate_children(child,
			    G_FILE_ATTRIBUTE_STANDARD_NAME ","
			    G_FILE_ATTRIBUTE_STANDARD_TYPE,
			    G_FILE_QUERY_INFO_NONE, NULL, NULL);
		    
		    update_context_push(context, child, tmp_iter, child_e);
		}

		g_object_unref(info);
		g_free(display_name);
		g_free(new_name);

		n = gtk_tree_model_iter_n_children(GTK_TREE_MODEL(context->store), parent_iter);
		if (n == 1) {
		    GtkTreePath* path;
		    path = gtk_tree_model_get_path(GTK_TREE_MODEL(context->store), parent_iter);
		    gtk_tree_view_expand_row(context->treeview, path, FALSE);
		    gtk_tree_path_free(path);
		}
	    } else {
		g_object_unref(file);
		gtk_tree_iter_free(parent_iter);
		g_object_unref(e);
		update_context_pop(context);
	    }
	} else {
	    context->file_stack = g_slist_delete_link(context->file_stack, context->file_stack);

	    name = g_file_get_basename(file);
	    display_name = get_display_name(name);
	    new_name = get_new_name(name, context->encoding);

	    file_list_model_append(context->store, &iter, NULL,
		    file, name, display_name, new_name);

	    if (new_name == NULL)
		context->success_all = FALSE;

	    if (context->include_subdir) {
		ftype = g_file_query_file_type(file, G_FILE_QUERY_INFO_NONE, NULL);
		if (ftype == G_FILE_TYPE_DIRECTORY) {
		    GtkTreeIter* tmp_iter;
		    GFileEnumerator* e;

		    tmp_iter = gtk_tree_iter_copy(&iter);
		    e = g_file_enumerate_children(file,
			    G_FILE_ATTRIBUTE_STANDARD_NAME ","
			    G_FILE_ATTRIBUTE_STANDARD_TYPE,
			    G_FILE_QUERY_INFO_NONE, NULL, NULL);

		    update_context_push(context, file, tmp_iter, e);
		}
	    }

	    g_free(name);
	    g_free(display_name);
	    g_free(new_name);
	}
    }

    return TRUE;
}
示例#27
0
文件: model.c 项目: kkonradpl/mtscan
void
mtscan_model_add(mtscan_model_t *model,
                 network_t      *net,
                 gboolean        merge)
{
    GtkTreeIter *iter_merge;
    GtkTreeIter iter;
    gint8 current_maxrssi;
    gint64 current_firstseen;
    gint64 current_lastseen;
    signals_t *current_signals;
    gint64 *address;

    if(merge && (iter_merge = g_hash_table_lookup(model->map, &net->address)))
    {
        /* Merge a network, check current values first */
        gtk_tree_model_get(GTK_TREE_MODEL(model->store), iter_merge,
                           COL_MAXRSSI, &current_maxrssi,
                           COL_FIRSTLOG, &current_firstseen,
                           COL_LASTLOG, &current_lastseen,
                           COL_SIGNALS, &current_signals,
                           -1);

        /* Merge signal samples */
        signals_merge(current_signals, net->signals);

        /* Update the first seen date, if required */
        if(net->firstseen < current_firstseen)
        {
            gtk_list_store_set(model->store, iter_merge,
                               COL_FIRSTLOG, net->firstseen,
                               -1);
        }

        /* Update the last seen date along with other values, if required */
        if(net->lastseen > current_lastseen)
        {
            gtk_list_store_set(model->store, iter_merge,
                               COL_FREQUENCY, net->frequency,
                               COL_CHANNEL, (net->channel ? net->channel : ""),
                               COL_STREAMS, net->streams,
                               COL_MODE, (net->mode ? net->mode : ""),
                               COL_SSID, (net->ssid ? net->ssid : ""),
                               COL_RADIONAME, (net->radioname ? net->radioname : ""),
                               COL_PRIVACY, net->flags.privacy,
                               COL_ROUTEROS, net->flags.routeros,
                               COL_NSTREME, net->flags.nstreme,
                               COL_TDMA, net->flags.tdma,
                               COL_WDS, net->flags.wds,
                               COL_BRIDGE, net->flags.bridge,
                               COL_ROUTEROS_VER, (net->routeros_ver ? net->routeros_ver : ""),
                               COL_AIRMAX, net->ubnt_airmax,
                               COL_AIRMAX_AC_PTP, net->ubnt_ptp,
                               COL_AIRMAX_AC_PTMP, net->ubnt_ptmp,
                               COL_AIRMAX_AC_MIXED, net->ubnt_mixed,
                               COL_LASTLOG, net->lastseen,
                               COL_DISTANCE, NAN,
                               -1);
        }

        /* Update the max signal level together with its coordinates, if required */
        if(net->rssi > current_maxrssi)
        {
            gtk_list_store_set(model->store, iter_merge,
                               COL_MAXRSSI, net->rssi,
                               COL_LATITUDE, net->latitude,
                               COL_LONGITUDE, net->longitude,
                               COL_AZIMUTH, net->azimuth,
                               COL_DISTANCE, NAN,
                               -1);
        }
    }
    else
    {
        /* Add a new network */
        gtk_list_store_insert_with_values(model->store, &iter, -1,
                                          COL_STATE, MODEL_STATE_INACTIVE,
                                          COL_ADDRESS, net->address,
                                          COL_FREQUENCY, net->frequency,
                                          COL_CHANNEL, (net->channel ? net->channel : ""),
                                          COL_STREAMS, net->streams,
                                          COL_MODE, (net->mode ? net->mode : ""),
                                          COL_SSID, (net->ssid ? net->ssid : ""),
                                          COL_RADIONAME, (net->radioname ? net->radioname : ""),
                                          COL_MAXRSSI, net->rssi,
                                          COL_RSSI, MODEL_NO_SIGNAL,
                                          COL_NOISE, net->noise,
                                          COL_PRIVACY, net->flags.privacy,
                                          COL_ROUTEROS, net->flags.routeros,
                                          COL_NSTREME, net->flags.nstreme,
                                          COL_TDMA, net->flags.tdma,
                                          COL_WDS, net->flags.wds,
                                          COL_BRIDGE, net->flags.bridge,
                                          COL_ROUTEROS_VER, (net->routeros_ver ? net->routeros_ver : ""),
                                          COL_AIRMAX, net->ubnt_airmax,
                                          COL_AIRMAX_AC_PTP, net->ubnt_ptp,
                                          COL_AIRMAX_AC_PTMP, net->ubnt_ptmp,
                                          COL_AIRMAX_AC_MIXED, net->ubnt_mixed,
                                          COL_FIRSTLOG, net->firstseen,
                                          COL_LASTLOG, net->lastseen,
                                          COL_LATITUDE, net->latitude,
                                          COL_LONGITUDE, net->longitude,
                                          COL_AZIMUTH, net->azimuth,
                                          COL_DISTANCE, NAN,
                                          COL_SIGNALS, net->signals,
                                          -1);

        address = gint64dup(&net->address);
        g_hash_table_insert(model->map, address, gtk_tree_iter_copy(&iter));

        /* Signals are stored in GtkListStore just as pointer,
           so set it to NULL before freeing the struct */
        net->signals = NULL;
    }
}
示例#28
0
文件: model.c 项目: kkonradpl/mtscan
gint
model_update_network(mtscan_model_t *model,
                     network_t      *net)
{
    GtkTreeIter *iter_ptr;
    GtkTreeIter iter;
    gint64 *address;
    gchar *current_ssid;
    gchar *current_radioname;
    gint8 current_maxrssi;
    guint8 current_state;
    gboolean new_network_found;
    gfloat distance = NAN;

    if(g_hash_table_lookup_extended(model->map, &net->address, (gpointer*)&address, (gpointer*)&iter_ptr))
    {
        /* Update a network, check current values first */
        gtk_tree_model_get(GTK_TREE_MODEL(model->store), iter_ptr,
                           COL_STATE, &current_state,
                           COL_SSID, &current_ssid,
                           COL_RADIONAME, &current_radioname,
                           COL_MAXRSSI, &current_maxrssi,
                           COL_SIGNALS, &net->signals,
                           -1);

        /* Update state to active (keep MODEL_STATE_NEW untouched) */
        if(current_state == MODEL_STATE_INACTIVE)
            current_state = MODEL_STATE_ACTIVE;

        /* Preserve hidden SSIDs */
        if((net->ssid && !net->ssid[0]) ||
           !net->ssid)
        {
            g_free(net->ssid);
            net->ssid = current_ssid;
        }
        else
        {
            g_free(current_ssid);
        }

        /* ... and Radio Names */
        if((net->radioname && !net->radioname[0]) ||
           !net->radioname)
        {
            g_free(net->radioname);
            net->radioname = current_radioname;
        }
        else
        {
            g_free(current_radioname);
        }

#if MIKROTIK_LOW_SIGNAL_BUGFIX
        if(net->rssi >= -12 && net->rssi <= -10 && current_maxrssi <= -15)
            net->rssi = current_maxrssi;
#endif
#if MIKROTIK_HIGH_SIGNAL_BUGFIX
        if(net->rssi >= 10)
            net->rssi = current_maxrssi;
#endif

        if(conf_get_preferences_signals())
            signals_append(net->signals, signals_node_new(net->firstseen, net->rssi, net->latitude, net->longitude, net->azimuth));

        /* At new signal peak, update additionally COL_MAXRSSI, COL_LATITUDE, COL_LONGITUDE, COL_AZIMUTH and COL_DISTANCE */
        if(net->rssi > current_maxrssi)
        {
            if(conf_get_interface_geoloc())
                geoloc_match(net->address, net->ssid, net->azimuth, FALSE, &distance);

            gtk_list_store_set(model->store, iter_ptr,
                               COL_STATE, current_state,
                               COL_FREQUENCY, net->frequency,
                               COL_CHANNEL, (net->channel ? net->channel : ""),
                               COL_STREAMS, net->streams,
                               COL_MODE, (net->mode ? net->mode : ""),
                               COL_SSID, (net->ssid ? net->ssid : ""),
                               COL_RADIONAME, (net->radioname ? net->radioname : ""),
                               COL_MAXRSSI, net->rssi,
                               COL_RSSI, net->rssi,
                               COL_NOISE, net->noise,
                               COL_PRIVACY, net->flags.privacy,
                               COL_ROUTEROS, net->flags.routeros,
                               COL_NSTREME, net->flags.nstreme,
                               COL_TDMA, net->flags.tdma,
                               COL_WDS, net->flags.wds,
                               COL_BRIDGE, net->flags.bridge,
                               COL_ROUTEROS_VER, (net->routeros_ver ? net->routeros_ver : ""),
                               COL_AIRMAX, net->ubnt_airmax,
                               COL_AIRMAX_AC_PTP, net->ubnt_ptp,
                               COL_AIRMAX_AC_PTMP, net->ubnt_ptmp,
                               COL_AIRMAX_AC_MIXED, net->ubnt_mixed,
                               COL_LASTLOG, net->firstseen,
                               COL_LATITUDE, net->latitude,
                               COL_LONGITUDE, net->longitude,
                               COL_AZIMUTH, net->azimuth,
                               COL_DISTANCE, distance,
                               -1);
        }
        else
        {
            gtk_list_store_set(model->store, iter_ptr,
                               COL_STATE, current_state,
                               COL_FREQUENCY, net->frequency,
                               COL_CHANNEL, (net->channel ? net->channel : ""),
                               COL_STREAMS, net->streams,
                               COL_MODE, (net->mode ? net->mode : ""),
                               COL_SSID, (net->ssid ? net->ssid : ""),
                               COL_RADIONAME, (net->radioname ? net->radioname : ""),
                               COL_RSSI, net->rssi,
                               COL_NOISE, net->noise,
                               COL_PRIVACY, net->flags.privacy,
                               COL_ROUTEROS, net->flags.routeros,
                               COL_NSTREME, net->flags.nstreme,
                               COL_TDMA, net->flags.tdma,
                               COL_WDS, net->flags.wds,
                               COL_BRIDGE, net->flags.bridge,
                               COL_ROUTEROS_VER, (net->routeros_ver ? net->routeros_ver : ""),
                               COL_AIRMAX, net->ubnt_airmax,
                               COL_AIRMAX_AC_PTP, net->ubnt_ptp,
                               COL_AIRMAX_AC_PTMP, net->ubnt_ptmp,
                               COL_AIRMAX_AC_MIXED, net->ubnt_mixed,
                               COL_LASTLOG, net->firstseen,
                               -1);
        }

        /* Add address to the active network list */
        g_hash_table_insert(model->active, address, iter_ptr);
        new_network_found = MODEL_NETWORK_UPDATE;
    }
    else
    {
        /* Add a new network */
        if(conf_get_interface_geoloc())
            geoloc_match(net->address, net->ssid, net->azimuth, conf_get_preferences_location_wigle(), &distance);

        net->signals = signals_new();
        if(conf_get_preferences_signals())
            signals_append(net->signals, signals_node_new(net->firstseen, net->rssi, net->latitude, net->longitude, net->azimuth));

        gtk_list_store_insert_with_values(model->store, &iter, -1,
                                          COL_STATE, MODEL_STATE_NEW,
                                          COL_ADDRESS, net->address,
                                          COL_FREQUENCY, net->frequency,
                                          COL_CHANNEL, (net->channel ? net->channel : ""),
                                          COL_STREAMS, net->streams,
                                          COL_MODE, (net->mode ? net->mode : ""),
                                          COL_SSID, (net->ssid ? net->ssid : ""),
                                          COL_RADIONAME, (net->radioname ? net->radioname : ""),
                                          COL_MAXRSSI, net->rssi,
                                          COL_RSSI, net->rssi,
                                          COL_NOISE, net->noise,
                                          COL_PRIVACY, net->flags.privacy,
                                          COL_ROUTEROS, net->flags.routeros,
                                          COL_NSTREME, net->flags.nstreme,
                                          COL_TDMA, net->flags.tdma,
                                          COL_WDS, net->flags.wds,
                                          COL_BRIDGE, net->flags.bridge,
                                          COL_ROUTEROS_VER, (net->routeros_ver ? net->routeros_ver : ""),
                                          COL_AIRMAX, net->ubnt_airmax,
                                          COL_AIRMAX_AC_PTP, net->ubnt_ptp,
                                          COL_AIRMAX_AC_PTMP, net->ubnt_ptmp,
                                          COL_AIRMAX_AC_MIXED, net->ubnt_mixed,
                                          COL_FIRSTLOG, net->firstseen,
                                          COL_LASTLOG, net->firstseen,
                                          COL_LATITUDE, net->latitude,
                                          COL_LONGITUDE, net->longitude,
                                          COL_AZIMUTH, net->azimuth,
                                          COL_DISTANCE, distance,
                                          COL_SIGNALS, net->signals,
                                          -1);

        iter_ptr = gtk_tree_iter_copy(&iter);
        address = gint64dup(&net->address);

        g_hash_table_insert(model->map, address, iter_ptr);
        g_hash_table_insert(model->active, address, iter_ptr);

        if(conf_get_preferences_alarmlist_enabled() && conf_get_preferences_alarmlist(*address))
        {
            new_network_found = MODEL_NETWORK_NEW_ALARM;
            if(conf_get_preferences_events_new_network())
                mtscan_exec(conf_get_preferences_events_new_network_exec(),
                            2,
                            model_format_address(*address, FALSE),
                            "ALARM");
        }
        else if(conf_get_preferences_highlightlist_enabled() && conf_get_preferences_highlightlist(*address))
        {
            new_network_found = MODEL_NETWORK_NEW_HIGHLIGHT;
            if(conf_get_preferences_events_new_network())
                mtscan_exec(conf_get_preferences_events_new_network_exec(),
                            2,
                            model_format_address(*address, FALSE),
                            "HIGHLIGHT");
        }
        else
        {
            new_network_found = MODEL_NETWORK_NEW;
            if(conf_get_preferences_events_new_network())
                mtscan_exec(conf_get_preferences_events_new_network_exec(),
                            2,
                            model_format_address(*address, FALSE),
                            "NORMAL");
        }
    }

    /* Signals are stored in GtkListStore just as pointer,
       so set it to NULL before freeing the struct */
    net->signals = NULL;
    return new_network_found;
}
static void
edit_partition_populate (EditPartitionData *data)
{
  const gchar *cur_type;
  GList *l;
  guint n;
  GtkTreeIter *active_iter = NULL;
  GtkListStore *model;
  GList *infos;
  const gchar *cur_table_subtype;
  UDisksClient *client;
  GtkCellRenderer *renderer;

  client = gdu_window_get_client (data->window);

  model = gtk_list_store_new (MODEL_N_COLUMNS,
                              G_TYPE_BOOLEAN,
                              G_TYPE_STRING,
                              G_TYPE_STRING);

  cur_type = udisks_partition_get_type_ (data->partition);
  infos = udisks_client_get_partition_type_infos (client,
                                                  data->partition_table_type,
                                                  NULL);
  /* assume that table subtypes are in order */
  cur_table_subtype = NULL;
  for (l = infos, n = 0; l != NULL; l = l->next, n++)
    {
      UDisksPartitionTypeInfo *info = l->data;
      const gchar *type_for_display;
      gchar *escaped_type_for_display;
      gchar *s;
      GtkTreeIter iter;

      /* skip type like 'Extended Partition' (dos 0x05) since we can't
       * just change the partition type to that
       */
      if (info->flags & UDISKS_PARTITION_TYPE_INFO_FLAGS_CREATE_ONLY)
        continue;

      if (g_strcmp0 (info->table_subtype, cur_table_subtype) != 0)
        {
          s = g_strdup_printf ("<i>%s</i>",
                               udisks_client_get_partition_table_subtype_for_display (client,
                                                                                      info->table_type,
                                                                                      info->table_subtype));
          gtk_list_store_insert_with_values (model,
                                             NULL, /* out iter */
                                             G_MAXINT, /* position */
                                             MODEL_COLUMN_SELECTABLE, FALSE,
                                             MODEL_COLUMN_NAME_MARKUP, s,
                                             MODEL_COLUMN_TYPE, NULL,
                                             -1);
          g_free (s);
          cur_table_subtype = info->table_subtype;
        }

#if UDISKS_CHECK_VERSION(2, 1, 1)
      type_for_display = udisks_client_get_partition_type_and_subtype_for_display (client,
                                                                                   data->partition_table_type,
                                                                                   info->table_subtype,
                                                                                   info->type);
#else
      type_for_display = udisks_client_get_partition_type_for_display (client,
                                                                       data->partition_table_type,
                                                                       info->type);
#endif
      escaped_type_for_display = g_markup_escape_text (type_for_display, -1);
      s = g_strdup_printf ("%s <span size=\"small\">(%s)</span>",
                           escaped_type_for_display,
                           info->type);
      g_free (escaped_type_for_display);

      gtk_list_store_insert_with_values (model,
                                         &iter,
                                         G_MAXINT, /* position */
                                         MODEL_COLUMN_SELECTABLE, TRUE,
                                         MODEL_COLUMN_NAME_MARKUP, s,
                                         MODEL_COLUMN_TYPE, info->type,
                                         -1);

      if (active_iter == NULL && g_strcmp0 (info->type, cur_type) == 0)
        active_iter = gtk_tree_iter_copy (&iter);

      g_free (s);
    }
  gtk_combo_box_set_model (GTK_COMBO_BOX (data->type_combobox), GTK_TREE_MODEL (model));
  if (active_iter != NULL)
    {
      gtk_combo_box_set_active_iter (GTK_COMBO_BOX (data->type_combobox), active_iter);
      gtk_tree_iter_free (active_iter);
    }

  renderer = gtk_cell_renderer_text_new ();
  gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (data->type_combobox), renderer, FALSE);
  gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (data->type_combobox), renderer,
                                  "sensitive", MODEL_COLUMN_SELECTABLE,
                                  "markup", MODEL_COLUMN_NAME_MARKUP,
                                  NULL);

  if (g_strcmp0 (data->partition_table_type, "gpt") == 0)
    {
      guint64 flags;
      gtk_entry_set_text (GTK_ENTRY (data->name_entry), udisks_partition_get_name (data->partition));
      flags = udisks_partition_get_flags (data->partition);
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->system_checkbutton),           (flags & (1UL<< 0)) != 0);
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->hide_from_firmware_checkbutton), (flags & (1UL<< 1)) != 0);
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->bootable_checkbutton),         (flags & (1UL<< 2)) != 0);
    }
  else if (g_strcmp0 (data->partition_table_type, "dos") == 0)
    {
      guint64 flags;
      flags = udisks_partition_get_flags (data->partition);
      gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (data->bootable_checkbutton),         (flags & (1UL<< 7)) != 0);
    }

  g_list_foreach (infos, (GFunc) udisks_partition_type_info_free, NULL);
  g_list_free (infos);
  g_object_unref (model);
}
示例#30
0
int __new_req_window_refresh_model_add_ca (void *pArg, int argc, char **argv, char **columnNames)
{
	GValue *last_dn_value = g_new0 (GValue, 1);
	GValue *last_parent_dn_value = g_new0 (GValue, 1);
	GtkTreeIter iter;
        __NewReqWindowRefreshModelAddCaUserData *pdata = (__NewReqWindowRefreshModelAddCaUserData *) pArg;
	GtkTreeStore * new_model = pdata->new_model;

        const gchar * string_value;

	// First we check if this is the first CA, or is a self-signed certificate
	if (! pdata->last_ca_iter || (! strcmp (argv[NEW_REQ_CA_MODEL_COLUMN_DN],argv[NEW_REQ_CA_MODEL_COLUMN_PARENT_DN])) ) {

		if (pdata->last_parent_iter)
			gtk_tree_iter_free (pdata->last_parent_iter);

		pdata->last_parent_iter = NULL;
		
	} else {
		// If not, then we must find the parent of the current nod
		gtk_tree_model_get_value (GTK_TREE_MODEL(new_model), pdata->last_ca_iter, NEW_REQ_CA_MODEL_COLUMN_DN, last_dn_value);
		gtk_tree_model_get_value (GTK_TREE_MODEL(new_model), pdata->last_ca_iter, NEW_REQ_CA_MODEL_COLUMN_PARENT_DN, 
					  last_parent_dn_value);
		
                string_value = g_value_get_string (last_dn_value);
                g_assert (string_value);

		if (! strcmp (argv[NEW_REQ_CA_MODEL_COLUMN_PARENT_DN], string_value)) {
			// Last node is parent of the current node
			if (pdata->last_parent_iter)
				gtk_tree_iter_free (pdata->last_parent_iter);
			pdata->last_parent_iter = gtk_tree_iter_copy (pdata->last_ca_iter);
		} else {
			// We go back in the hierarchical tree, starting in the current parent, until we find the parent of the
			// current certificate.
			
			while (pdata->last_parent_iter && 
			       strcmp (argv[NEW_REQ_CA_MODEL_COLUMN_PARENT_DN], g_value_get_string(last_parent_dn_value))) {

				if (! gtk_tree_model_iter_parent(GTK_TREE_MODEL(new_model), &iter, pdata->last_parent_iter)) {
					// Last ca iter is a top_level
					if (pdata->last_parent_iter)
						gtk_tree_iter_free (pdata->last_parent_iter);
					pdata->last_parent_iter = NULL;
				} else {
					if (pdata->last_parent_iter)
						gtk_tree_iter_free (pdata->last_parent_iter);
					pdata->last_parent_iter = gtk_tree_iter_copy (&iter);
				}

				g_value_unset (last_parent_dn_value);

				gtk_tree_model_get_value (GTK_TREE_MODEL(new_model), pdata->last_parent_iter,
							  NEW_REQ_CA_MODEL_COLUMN_DN, 
							  last_parent_dn_value);

			}
		}

		
	}

	gtk_tree_store_append (new_model, &iter, pdata->last_parent_iter);
	
	gtk_tree_store_set (new_model, &iter,
			    0, atoll(argv[NEW_REQ_CA_MODEL_COLUMN_ID]), 
			    1, argv[NEW_REQ_CA_MODEL_COLUMN_SERIAL],
			    2, argv[NEW_REQ_CA_MODEL_COLUMN_SUBJECT],
			    3, argv[NEW_REQ_CA_MODEL_COLUMN_DN],
			    4, argv[NEW_REQ_CA_MODEL_COLUMN_PARENT_DN],
                            5, argv[NEW_REQ_CA_MODEL_COLUMN_PEM],
			    -1);
	if (pdata->last_ca_iter)
		gtk_tree_iter_free (pdata->last_ca_iter);
	pdata->last_ca_iter = gtk_tree_iter_copy (&iter);

	g_free (last_dn_value);
	g_free (last_parent_dn_value);

	return 0;
}