void on_entry_config_ipv6_trt_prefix_activate(GtkEditable *unused_editable, gpointer unused_udata) { const gchar *endptr; host_addr_t addr; gchar *text; (void) unused_editable; (void) unused_udata; text = STRTRACK(gtk_editable_get_chars( GTK_EDITABLE(gui_dlg_prefs_lookup("entry_config_ipv6_trt_prefix")), 0, -1)); g_strstrip(text); if ( string_to_host_addr(text, &endptr, &addr) && '\0' == endptr[0] && host_addr_is_ipv6(addr) ) { gnet_prop_set_ip_val(PROP_IPV6_TRT_PREFIX, addr); } else if (0 == strcmp(text, "") || 0 == strcmp(text, "<none>")) { gnet_prop_set_ip_val(PROP_IPV6_TRT_PREFIX, zero_host_addr); } G_FREE_NULL(text); }
static void on_cell_edited(GtkCellRendererText *unused_renderer, const gchar *path_str, const gchar *text, gpointer unused_data) { GtkTreeView *tv; GtkTreeModel *model; GtkTreePath *path; GtkTreeIter iter; property_t prop; guint u; (void) unused_renderer; (void) unused_data; tv = GTK_TREE_VIEW(gui_dlg_prefs_lookup("treeview_dbg_property")); g_return_if_fail(NULL != tv); model = gtk_tree_view_get_model(tv); g_return_if_fail(NULL != model); path = gtk_tree_path_new_from_string(path_str); gtk_tree_model_get_iter(model, &iter, path); u = 0; gtk_tree_model_get(model, &iter, dbg_col_property, &u, (-1)); prop = (property_t) u; gnet_prop_set_from_string(prop, text); gtk_list_store_set(GTK_LIST_STORE(model), &iter, dbg_col_value, gnet_prop_to_string(prop), (-1)); gtk_tree_path_free(path); }
void on_entry_dbg_property_pattern_activate(GtkEditable *unused_editable, gpointer unused_udata) { static gchar old_pattern[1024]; gchar *text; (void) unused_editable; (void) unused_udata; text = STRTRACK(gtk_editable_get_chars( GTK_EDITABLE(gui_dlg_prefs_lookup("entry_dbg_property_pattern")), 0, -1)); g_strstrip(text); if (0 != strcmp(text, old_pattern)) { GSList *props; g_strlcpy(old_pattern, text, sizeof old_pattern); props = gnet_prop_get_by_regex(text, NULL); if (!props) statusbar_gui_warning(10, _("No property name matches the pattern \"%s\"."), text); dbg_property_show_list(props); dbg_property_update_selection(); gm_slist_free_null(&props); } G_FREE_NULL(text); }
/* * Create an status so that gtk-gnutella can be minimized to a * so-called "system tray" if supported by the window manager. */ icon_pixbuf = create_pixbuf("icon.16x16.xpm"); status_icon = gtk_status_icon_new_from_pixbuf(icon_pixbuf); gtk_status_icon_set_tooltip(status_icon, _("gtk-gnutella: Click to minimize/restore")); status_icon_set_visible(TRUE); gui_signal_connect(status_icon, "activate", on_status_icon_activate, NULL); gui_signal_connect(status_icon, "size-changed", on_status_icon_size_changed, NULL); gui_signal_connect(status_icon, "popup-menu", on_status_icon_popup_menu, NULL); } static void status_icon_disable(void) { if (status_icon) { g_object_unref(status_icon); status_icon = NULL; gtk_widget_show(gui_main_window()); } } static gboolean status_icon_enabled_changed(property_t prop) { gboolean enabled; gui_prop_get_boolean_val(prop, &enabled); if (enabled) { status_icon_enable(); } else { status_icon_disable(); } return FALSE; } static void status_icon_init(void) { gui_prop_add_prop_changed_listener(PROP_STATUS_ICON_ENABLED, status_icon_enabled_changed, TRUE); } #else /* Gtk+ < 2.10 */ static void status_icon_init(void) { gtk_widget_set_sensitive( gui_dlg_prefs_lookup("checkbutton_status_icon_enabled"), FALSE); }
void on_entry_config_force_ip_changed(GtkEditable *editable, gpointer unused_udata) { gchar *text = STRTRACK(gtk_editable_get_chars(editable, 0, -1)); const gchar *endptr; gboolean sensitive; (void) unused_udata; g_strstrip(text); sensitive = string_to_host_addr(text, &endptr, NULL) && '\0' == endptr[0]; gtk_widget_set_sensitive( gui_dlg_prefs_lookup("checkbutton_config_force_ip"), sensitive); gtk_widget_set_sensitive( gui_dlg_prefs_lookup("checkbutton_config_bind_ipv4"), sensitive); G_FREE_NULL(text); }
static void dbg_property_update_selection(void) { const gchar *tip, *label_text, *def_text, *value_text; GtkCList *clist; GtkLabel *label; GtkEntry *value, *def; gpointer data; gint row; clist = GTK_CLIST(gui_dlg_prefs_lookup("clist_dbg_property")); label = GTK_LABEL(gui_dlg_prefs_lookup("label_dbg_property_name")); value = GTK_ENTRY(gui_dlg_prefs_lookup("entry_dbg_property_value")); def = GTK_ENTRY(gui_dlg_prefs_lookup("entry_dbg_property_default")); if ( clist->selection && -1 != (row = GPOINTER_TO_INT(clist->selection->data)) && NULL != (data = gtk_clist_get_row_data(clist, row)) ) { property_t prop = GPOINTER_TO_UINT(data); label_text = gnet_prop_name(prop); value_text = gnet_prop_to_string(prop); def_text = gnet_prop_default_to_string(prop); tip = gnet_prop_description(prop); } else { const gchar *none = _("<no property selected>"); label_text = none; def_text = none; value_text = none; tip = _("Select a property to see its description."); } gtk_label_set_text(label, label_text); gtk_entry_set_text(def, def_text); gtk_entry_set_text(value, value_text); gtk_tooltips_set_tip(settings_gui_tooltips(), GTK_WIDGET(value), tip, NULL); }
void on_entry_server_hostname_changed(GtkEditable *editable, gpointer unused_udata) { gchar *text = STRTRACK(gtk_editable_get_chars(editable, 0, -1)); (void) unused_udata; g_strstrip(text); gtk_widget_set_sensitive( gui_dlg_prefs_lookup("checkbutton_give_server_hostname"), strlen(text) > 3); /* Minimum: "x.cx" */ G_FREE_NULL(text); }
void on_button_dbg_property_refresh_clicked(GtkButton *unused_button, gpointer unused_udata) { GtkTreeModel *model; GtkTreeView *tv; (void) unused_button; (void) unused_udata; tv = GTK_TREE_VIEW(gui_dlg_prefs_lookup("treeview_dbg_property")); model = gtk_tree_view_get_model(tv); gtk_tree_model_foreach(GTK_TREE_MODEL(model), refresh_property, NULL); }
static void dbg_property_update_selection(void) { GtkTreeView *tv; GtkTreeSelection *s; GtkTreeModel *model; GtkTreeIter iter; GtkWidget *widget; const gchar *text; tv = GTK_TREE_VIEW(gui_dlg_prefs_lookup("treeview_dbg_property")); s = gtk_tree_view_get_selection(tv); if (gtk_tree_selection_get_selected(s, &model, &iter)) { guint u = 0; gtk_tree_model_get(model, &iter, dbg_col_property, &u, (-1)); text = gnet_prop_default_to_string((property_t) u); } else { text = _("<no property selected>"); } widget = gui_dlg_prefs_lookup("label_dbg_property_default"); gtk_label_set_text(GTK_LABEL(widget), text); }
void on_entry_server_hostname_activate(GtkEditable *unused_editable, gpointer unused_udata) { gchar *text; (void) unused_editable; (void) unused_udata; text = STRTRACK(gtk_editable_get_chars( GTK_EDITABLE(gui_dlg_prefs_lookup("entry_server_hostname")), 0, -1)); g_strstrip(text); gnet_prop_set_string(PROP_SERVER_HOSTNAME, text); G_FREE_NULL(text); }
void dbg_property_show_list(const GSList *props) { const GSList *sl; GtkTreeView *tv; GtkListStore *store; tv = GTK_TREE_VIEW(gui_dlg_prefs_lookup("treeview_dbg_property")); if (!gtk_tree_view_get_model(tv)) dbg_tree_init(); store = GTK_LIST_STORE(gtk_tree_view_get_model(tv)); gtk_list_store_clear(store); if (!props) { const gchar *text = _("<no property selected>"); GtkWidget *widget; widget = gui_dlg_prefs_lookup("label_dbg_property_limits"); gtk_label_set_text(GTK_LABEL(widget), text); /* Gtk+ 2.x has editable column cells */ #ifdef USE_GTK1 widget = gui_dlg_prefs_lookup("label_dbg_property_name"); gtk_label_set_text(GTK_LABEL(widget), text); widget = gui_dlg_prefs_lookup("entry_dbg_property_value"); gtk_entry_set_text(GTK_ENTRY(widget), text); widget = gui_dlg_prefs_lookup("entry_dbg_property_default"); gtk_entry_set_text(GTK_ENTRY(widget), text); #endif /* USE_GTK1 */ #ifdef USE_GTK2 widget = gui_dlg_prefs_lookup("label_dbg_property_default"); gtk_label_set_text(GTK_LABEL(widget), text); #endif /* USE_GTK2 */ } for (sl = props; NULL != sl; sl = g_slist_next(sl)) { GtkTreeIter iter; property_t prop; prop = GPOINTER_TO_UINT(sl->data); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, dbg_col_saved, gnet_prop_is_saved(prop) ? _("Yes") : _("No"), dbg_col_type, gnet_prop_type_to_string(prop), dbg_col_name, gnet_prop_name(prop), dbg_col_value, gnet_prop_to_string(prop), dbg_col_property, (guint) prop, (-1)); } }
void on_entry_config_ipv6_trt_prefix_changed(GtkEditable *editable, gpointer unused_udata) { gchar *text = STRTRACK(gtk_editable_get_chars(editable, 0, -1)); const gchar *endptr; host_addr_t addr; gboolean sensitive; (void) unused_udata; g_strstrip(text); sensitive = string_to_host_addr(text, &endptr, &addr) && '\0' == endptr[0] && host_addr_is_ipv6(addr); gtk_widget_set_sensitive( gui_dlg_prefs_lookup("checkbutton_config_ipv6_trt_enable"), sensitive); G_FREE_NULL(text); }
void on_button_config_remove_dir_clicked(GtkButton *unused_button, gpointer unused_udata) { GtkTreeView *tv; GtkTreeModel *model; GtkTreeIter iter; GtkTreeSelection *selection; pslist_t *sl, *pl_dirs = NULL; char *dirs; (void) unused_button; (void) unused_udata; tv = GTK_TREE_VIEW(gui_dlg_prefs_lookup("treeview_shared_dirs")); model = gtk_tree_view_get_model(tv); if (!gtk_tree_model_get_iter_first(model, &iter)) return; /* Regenerate the string property holding a list of paths */ selection = gtk_tree_view_get_selection(tv); do { char *pathname = NULL; /* Skip items selected for removal */ if (gtk_tree_selection_iter_is_selected(selection, &iter)) continue; gtk_tree_model_get(model, &iter, 0, &pathname, (-1)); pl_dirs = pslist_prepend(pl_dirs, pathname); } while (gtk_tree_model_iter_next(model, &iter)); dirs = dirlist_to_string(pl_dirs); gnet_prop_set_string(PROP_SHARED_DIRS_PATHS, dirs); HFREE_NULL(dirs); PSLIST_FOREACH(pl_dirs, sl) { G_FREE_NULL(sl->data); }
void on_entry_config_force_ip_activate(GtkEditable *unused_editable, gpointer unused_udata) { gchar *text; host_addr_t addr; const gchar *endptr; (void) unused_editable; (void) unused_udata; text = STRTRACK(gtk_editable_get_chars( GTK_EDITABLE(gui_dlg_prefs_lookup("entry_config_force_ip")), 0, -1)); g_strstrip(text); if (string_to_host_addr(text, &endptr, &addr) && '\0' == endptr[0]) { gnet_prop_set_ip_val(PROP_FORCED_LOCAL_IP, addr); } else if (0 == strcmp(text, "") || 0 == strcmp(text, "<none>")) { gnet_prop_set_ip_val(PROP_FORCED_LOCAL_IP, zero_host_addr); } G_FREE_NULL(text); }
void on_button_config_remove_dir_clicked(GtkButton *unused_button, gpointer unused_udata) { GtkTreeView *tv; GtkTreeModel *model; GtkTreeIter iter; GtkTreeSelection *selection; str_t *s; (void) unused_button; (void) unused_udata; tv = GTK_TREE_VIEW(gui_dlg_prefs_lookup("treeview_shared_dirs")); model = gtk_tree_view_get_model(tv); if (!gtk_tree_model_get_iter_first(model, &iter)) return; /* Regenerate the string property holding a list of paths */ selection = gtk_tree_view_get_selection(tv); s = str_new(0); do { gchar *dir = NULL; /* Skip items selected for removal */ if (gtk_tree_selection_iter_is_selected(selection, &iter)) continue; gtk_tree_model_get(model, &iter, 0, &dir, (-1)); if (str_len(s) > 0) str_putc(s, ':'); str_cat(s, dir); G_FREE_NULL(dir); } while (gtk_tree_model_iter_next(model, &iter)); gnet_prop_set_string(PROP_SHARED_DIRS_PATHS, str_2c(s)); str_destroy(s); }
static void dbg_property_show_list(const GSList *props) { GtkCList *clist; const GSList *sl; clist = GTK_CLIST(gui_dlg_prefs_lookup("clist_dbg_property")); gtk_clist_freeze(clist); gtk_clist_clear(clist); for (sl = props; NULL != sl; sl = g_slist_next(sl)) { static const gchar * const titles[num_dbg_cols] = { "", "", "", "", }; property_t prop = GPOINTER_TO_UINT(sl->data); gint row; row = gtk_clist_append(clist, deconstify_gpointer(titles)); dbg_property_set_row(clist, row, prop); } gtk_clist_sort(clist); gtk_clist_columns_autosize(clist); gtk_clist_thaw(clist); }
void on_entry_dbg_property_value_activate(GtkEditable *editable, gpointer unused_udata) { GtkCList *clist; (void) unused_udata; clist = GTK_CLIST(gui_dlg_prefs_lookup("clist_dbg_property")); if (clist->selection) { gchar *text; property_t prop; gint row; text = STRTRACK(gtk_editable_get_chars(editable, 0, -1)); row = GPOINTER_TO_INT(clist->selection->data); prop = GPOINTER_TO_UINT(gtk_clist_get_row_data(clist, row)); gnet_prop_set_from_string(prop, text); dbg_property_set_row(clist, row, prop); G_FREE_NULL(text); } }
static void dbg_tree_init(void) { static const struct { const gchar *title; const gint width; const gboolean editable; const enum dbg_cols id; } columns[] = { { N_("Saved"), 0, FALSE, dbg_col_saved }, { N_("Type"), 0, FALSE, dbg_col_type }, { N_("Property"), 0, FALSE, dbg_col_name }, { N_("Value"), 200, TRUE, dbg_col_value }, { NULL, 0, FALSE, dbg_col_property }, /* property_t */ }; GtkListStore *store; GtkTreeView *tv; guint i; STATIC_ASSERT(G_N_ELEMENTS(columns) == (guint) num_dbg_cols); tv = GTK_TREE_VIEW(gui_dlg_prefs_lookup("treeview_dbg_property")); store = GTK_LIST_STORE(gtk_list_store_new(G_N_ELEMENTS(columns), G_TYPE_STRING, /* Type */ G_TYPE_STRING, /* Name */ G_TYPE_STRING, /* Value */ G_TYPE_STRING, /* Persistent */ G_TYPE_UINT)); /* property_t */ gtk_tree_view_set_model(tv, GTK_TREE_MODEL(store)); g_object_unref(store); for (i = 0; i < G_N_ELEMENTS(columns); i++) { GtkTreeViewColumn *column; GtkCellRenderer *renderer; /* Skip invisible column zero which holds the property_t */ if (!columns[i].title) continue; renderer = gtk_cell_renderer_text_new(); if (columns[i].editable) { gui_signal_connect(renderer, "edited", on_cell_edited, NULL); g_object_set(renderer, "editable", TRUE, (void *) 0); } column = gtk_tree_view_column_new_with_attributes( _(columns[i].title), renderer, "text", i, (void *) 0); g_object_set(renderer, "xalign", 0.0, "xpad", GUI_CELL_RENDERER_XPAD, "ypad", GUI_CELL_RENDERER_YPAD, (void *) 0); g_object_set(column, "min-width", 1, "resizable", TRUE, "reorderable", FALSE, (void *) 0); if (columns[i].width) { g_object_set(column, "fixed-width", columns[i].width, "sizing", GTK_TREE_VIEW_COLUMN_FIXED, (void *) 0); } else { g_object_set(column, "sizing", GTK_TREE_VIEW_COLUMN_AUTOSIZE, (void *) 0); } gtk_tree_view_column_set_sort_column_id(column, i); gtk_tree_view_append_column(tv, column); } gui_signal_connect(tv, "enter-notify-event", on_enter_notify, tv); gui_signal_connect(tv, "leave-notify-event", on_leave_notify, tv); gui_signal_connect(tv, "cursor-changed", on_cursor_changed, tv); }