static void user_toggled_cb (GtkCellRendererToggle *renderer, gchar *path, gpointer user_data) { GstSharesTool *tool; GtkWidget *table; GtkTreeModel *model; GtkTreeIter iter; OobsUser *user; gboolean active; tool = GST_SHARES_TOOL (user_data); table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "users_table"); model = gtk_tree_view_get_model (GTK_TREE_VIEW (table)); if (! gtk_tree_model_get_iter_from_string (model, &iter, path)) return; gtk_tree_model_get (model, &iter, COL_ACTIVE, &active, COL_USER, &user, -1); /* we want to invert the state */ active ^= 1; if (!active) { oobs_smb_config_delete_user_password (OOBS_SMB_CONFIG (tool->smb_config), user); } else { GtkWidget *dialog; gint response; dialog = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "smb_password_dialog"); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (GST_TOOL (tool)->main_dialog)); response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_hide (dialog); if (response == GTK_RESPONSE_OK) { GtkWidget *entry; const gchar *password; entry = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "smb_password_entry"); password = gtk_entry_get_text (GTK_ENTRY (entry)); oobs_smb_config_set_user_password (OOBS_SMB_CONFIG (tool->smb_config), user, password); } } active = oobs_smb_config_user_has_password (OOBS_SMB_CONFIG (tool->smb_config), user); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ACTIVE, active, -1); g_object_unref (user); gst_tool_commit_async (GST_TOOL (tool), tool->smb_config, NULL, NULL, NULL); }
gboolean on_hostname_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data) { GstNetworkTool *tool; gboolean changed; const gchar *hostname; tool = GST_NETWORK_TOOL (gst_dialog_get_tool (GST_DIALOG (data))); changed = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "content-changed")); hostname = gtk_entry_get_text (GTK_ENTRY (widget)); if (changed && hostname && *hostname) { GtkWidget *dialog; gint res; dialog = gtk_message_dialog_new (GTK_WINDOW (GST_TOOL (tool)->main_dialog), GTK_DIALOG_MODAL, GTK_MESSAGE_WARNING, GTK_BUTTONS_NONE, _("The host name has changed"), NULL); gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (dialog), _("This will prevent you " "from launching new applications, and so you will " "have to log in again. Continue anyway?"), NULL); gtk_dialog_add_buttons (GTK_DIALOG (dialog), GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, _("Change _Host name"), GTK_RESPONSE_ACCEPT, NULL); res = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_destroy (dialog); if (res == GTK_RESPONSE_ACCEPT) { oobs_hosts_config_set_hostname (tool->hosts_config, hostname); gst_tool_commit (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config)); } else { gtk_entry_set_text (GTK_ENTRY (widget), oobs_hosts_config_get_hostname (tool->hosts_config)); } } g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (FALSE)); return FALSE; }
void host_aliases_run_dialog (GstNetworkTool *network_tool, GtkTreeIter *iter) { GstTool *tool; GtkWidget *dialog; GtkTreeView *list; GtkTreeModel *model; gint response; OobsStaticHost *host = NULL; if (iter) { list = network_tool->host_aliases_list; model = gtk_tree_view_get_model (list); gtk_tree_model_get (model, iter, COL_HOST_OBJECT, &host, -1); } tool = GST_TOOL (network_tool); dialog = network_tool->host_aliases_dialog; host_aliases_dialog_prepare (host); gst_dialog_add_edit_dialog (tool->main_dialog, dialog); gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (GST_TOOL (tool)->main_dialog)); response = gtk_dialog_run (GTK_DIALOG (dialog)); gtk_widget_hide (dialog); gst_dialog_remove_edit_dialog (tool->main_dialog, dialog); if (response == GTK_RESPONSE_OK) host_aliases_dialog_save (iter); if (host) g_object_unref (host); }
ETzMap * e_tz_map_new (GstTool *tool) { ETzMap *tzmap; GPtrArray *locs; TzLocation *tzl; GtkWidget *location_combo; int i; tzmap = g_new0 (ETzMap, 1); tzmap->tool = GST_TOOL (tool); tzmap->tzdb = tz_load_db (); if (!tzmap->tzdb) g_error ("Unable to load system timezone database."); tzmap->map = e_map_new (); if (!tzmap->map) g_error ("Unable to create map widget."); gtk_widget_set_events (GTK_WIDGET (tzmap->map), gtk_widget_get_events (GTK_WIDGET (tzmap->map)) | GDK_LEAVE_NOTIFY_MASK | GDK_VISIBILITY_NOTIFY_MASK); locs = tz_get_locations (tzmap->tzdb); for (i = 0; i < locs->len; i++) { tzl = g_ptr_array_index (locs, i); e_map_add_point (tzmap->map, NULL, tzl->longitude, tzl->latitude, TZ_MAP_POINT_NORMAL_RGBA); } g_signal_connect (G_OBJECT (tzmap->map), "map-event", G_CALLBACK (map), tzmap); g_signal_connect (G_OBJECT (tzmap->map), "unmap-event", G_CALLBACK (unmap), tzmap); g_signal_connect(G_OBJECT (tzmap->map), "motion-notify-event", G_CALLBACK (motion), (gpointer) tzmap); g_signal_connect(G_OBJECT(tzmap->map), "button-press-event", G_CALLBACK (button_pressed), (gpointer) tzmap); g_signal_connect(G_OBJECT (tzmap->map), "enter-notify-event", G_CALLBACK (in_map), (gpointer) tzmap); g_signal_connect(G_OBJECT (tzmap->map), "leave-notify-event", G_CALLBACK (out_map), (gpointer) tzmap); location_combo = gst_dialog_get_widget (tzmap->tool->main_dialog, "location_combo"); g_signal_connect (G_OBJECT (location_combo), "changed", G_CALLBACK (update_map), (gpointer) tzmap); return tzmap; }
int main (int argc, char *argv[]) { gst_init_tool ("users-admin", argc, argv, NULL); tool = GST_TOOL (gst_users_tool_new ()); gst_dialog_connect_signals (tool->main_dialog, signals); main_window_prepare (GST_USERS_TOOL (tool)); gtk_widget_show (GTK_WIDGET (tool->main_dialog)); gtk_main (); return 0; }
static void setup_shells_combo (GstUsersTool *tool) { GtkWidget *combo; GtkTreeModel *model; combo = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_settings_shell"); model = GTK_TREE_MODEL (gtk_list_store_new (1, G_TYPE_STRING)); gtk_combo_box_set_model (GTK_COMBO_BOX (combo), model); g_object_unref (model); gtk_combo_box_entry_set_text_column (GTK_COMBO_BOX_ENTRY (combo), 0); }
static void main_window_prepare (GstUsersTool *tool) { GtkWidget *uid_entry; GtkWidget *passwd_label; int width; uid_entry = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_settings_uid"); gtk_spin_button_set_range (GTK_SPIN_BUTTON (uid_entry), 0, OOBS_MAX_UID); create_tables (tool); gtk_window_set_default_size (GTK_WINDOW (GST_TOOL (tool)->main_dialog), 650, 400); /* Ensure dialog won't change size when selecting another user */ passwd_label = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_settings_passwd"); width = MAX (strlen (_("Not asked on login")), strlen (_("Asked on login"))); gtk_label_set_width_chars (GTK_LABEL (passwd_label), width); /* For random password generation. */ srand (time (NULL)); }
int main (int argc, char *argv[]) { gst_init_tool ("services-admin", argc, argv, NULL); tool = gst_services_tool_new (); gst_dialog_connect_signals (tool->main_dialog, signals); table_create (); service_settings_table_create (); gtk_window_set_default_size (GTK_WINDOW (GST_TOOL (tool)->main_dialog), 400, 550); gtk_widget_show (GTK_WIDGET (tool->main_dialog)); gtk_main (); return 0; }
/* callbacks */ void on_service_toggled (GtkCellRenderer *renderer, gchar *path_str, gpointer data) { GtkTreeView *treeview = GTK_TREE_VIEW (gst_dialog_get_widget (tool->main_dialog, "services_list")); GtkTreeModel *model = gtk_tree_view_get_model (treeview); GtkTreePath *path; GstTool *tool = GST_TOOL (data); GtkTreeIter iter; OobsService *service; gboolean value, new_value, dangerous; path = gtk_tree_path_new_from_string (path_str); value = gtk_cell_renderer_toggle_get_active (GTK_CELL_RENDERER_TOGGLE (renderer)); new_value = !value; if (!gtk_tree_model_get_iter (model, &iter, path)) return; gtk_tree_model_get (model, &iter, COL_OBJECT, &service, COL_DANGEROUS, &dangerous, -1); if (new_value || !dangerous || show_warning_dialog (tool, service)) { OobsServicesRunlevel *rl; rl = GST_SERVICES_TOOL (tool)->default_runlevel; oobs_service_set_runlevel_configuration (service, rl, (new_value) ? OOBS_SERVICE_START : OOBS_SERVICE_IGNORE, /* FIXME: hardcoded value... */ 50); oobs_object_commit (GST_SERVICES_TOOL (tool)->services_config); gtk_list_store_set (GTK_LIST_STORE (model), &iter, COL_ACTIVE, new_value, -1); } gtk_tree_path_free (path); }
gboolean on_domain_focus_out (GtkWidget *widget, GdkEventFocus *event, gpointer data) { GstNetworkTool *tool; gboolean changed; const gchar *domain; tool = GST_NETWORK_TOOL (gst_dialog_get_tool (GST_DIALOG (data))); changed = GPOINTER_TO_INT (g_object_get_data (G_OBJECT (widget), "content-changed")); domain = gtk_entry_get_text (GTK_ENTRY (widget)); if (changed) { oobs_hosts_config_set_domainname (tool->hosts_config, domain); gst_tool_commit (GST_TOOL (tool), OOBS_OBJECT (tool->hosts_config)); } g_object_set_data (G_OBJECT (widget), "content-changed", GINT_TO_POINTER (FALSE)); return FALSE; }
void users_table_set_config (GstSharesTool *tool) { GtkWidget *table; GtkListStore *store; GtkTreeIter iter; OobsList *users; OobsListIter list_iter; gboolean valid; table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "users_table"); store = gtk_list_store_new (LAST_COL, G_TYPE_BOOLEAN, G_TYPE_STRING, OOBS_TYPE_USER); users = oobs_users_config_get_users (OOBS_USERS_CONFIG (tool->users_config)); valid = oobs_list_get_iter_first (users, &list_iter); while (valid) { GObject *user; gboolean active; user = oobs_list_get (users, &list_iter); active = oobs_smb_config_user_has_password (OOBS_SMB_CONFIG (tool->smb_config), OOBS_USER (user)); gtk_list_store_append (store, &iter); gtk_list_store_set (store, &iter, COL_USER, user, COL_NAME, oobs_user_get_full_name (OOBS_USER (user)), COL_ACTIVE, active, -1); g_object_unref (user); valid = oobs_list_iter_next (users, &list_iter); } gtk_tree_view_set_model (GTK_TREE_VIEW (table), GTK_TREE_MODEL (store)); g_object_unref (store); }
void table_populate_profiles (GstUsersTool *tool, GList *profiles) { GstUserProfile *profile; GtkWidget *table; GtkWidget *radio; GtkWidget *label; GHashTable *radios; GHashTable *labels; GHashTableIter iter; gpointer value; GList *l; static int ncols, nrows; /* original size of the table */ PangoAttribute *attribute; PangoAttrList *attributes; int i; table = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_profile_table"); radios = g_object_get_data (G_OBJECT (table), "radio_buttons"); labels = g_object_get_data (G_OBJECT (table), "labels"); /* create the hash table to hold references to radio buttons and their labels */ if (radios == NULL) { /* keys are names owned by GstUserProfiles, values are pointers: * no need to free anything */ radios = g_hash_table_new (g_str_hash, g_str_equal); labels = g_hash_table_new (g_str_hash, g_str_equal); g_object_set_data (G_OBJECT (table), "radio_buttons", radios); g_object_set_data (G_OBJECT (table), "labels", labels); g_object_get (G_OBJECT (table), "n-rows", &nrows, "n-columns", &ncols, NULL); } else { /* free the radio buttons and labels if they were already here */ g_hash_table_iter_init (&iter, radios); while (g_hash_table_iter_next (&iter, NULL, &value)) { gtk_widget_destroy (GTK_WIDGET (value)); } g_hash_table_iter_init (&iter, labels); while (g_hash_table_iter_next (&iter, NULL, &value)) { gtk_widget_destroy (GTK_WIDGET (value)); } g_hash_table_remove_all (radios); g_hash_table_remove_all (labels); } /* increase table's size based on it's "empty" size * we leave an empty line after a radio and its decription label */ gtk_table_resize (GTK_TABLE (table), g_list_length (profiles) * 3 + nrows, ncols); radio = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_profile_custom"); label = gst_dialog_get_widget (GST_TOOL (tool)->main_dialog, "user_profile_custom_label"); attributes = pango_attr_list_new (); attribute = pango_attr_size_new (9 * PANGO_SCALE); pango_attr_list_insert (attributes, attribute); attribute = pango_attr_style_new (PANGO_STYLE_ITALIC); pango_attr_list_insert (attributes, attribute); gtk_label_set_attributes (GTK_LABEL (label), attributes); i = 1; /* empty line after "Custom" radio and label */ for (l = profiles; l; l = l->next) { profile = (GstUserProfile *) l->data; radio = gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON (radio), profile->name); label = gtk_label_new (profile->description); gtk_label_set_line_wrap (GTK_LABEL (label), TRUE); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_misc_set_padding (GTK_MISC (label), 16, 0); gtk_label_set_attributes (GTK_LABEL (label), attributes); gtk_table_attach_defaults (GTK_TABLE (table), radio, 0, ncols, nrows + i, nrows + i + 1); gtk_table_attach_defaults (GTK_TABLE (table), label, 1, ncols, nrows + i + 1, nrows + i + 2); gtk_widget_show (radio); gtk_widget_show (label); g_hash_table_replace (radios, profile->name, radio); g_hash_table_replace (labels, profile->name, label); i += 3; } }