void properties_cb (GtkAction *action, EyesApplet *eyes_applet) { GtkWidget *pbox, *hbox; GtkWidget *vbox, *indent; GtkWidget *categories_vbox; GtkWidget *category_vbox, *control_vbox; GtkWidget *tree; GtkWidget *scrolled; GtkWidget *label; GtkListStore *model; GtkTreeViewColumn *column; GtkCellRenderer *cell; GtkTreeSelection *selection; GtkTreeIter iter; DIR *dfd; struct dirent *dp; int i; #ifdef PATH_MAX gchar filename [PATH_MAX]; #else gchar *filename; #endif gchar *title; if (eyes_applet->prop_box.pbox) { gtk_window_set_screen ( GTK_WINDOW (eyes_applet->prop_box.pbox), gtk_widget_get_screen (GTK_WIDGET (eyes_applet->applet))); gtk_window_present (GTK_WINDOW (eyes_applet->prop_box.pbox)); return; } pbox = gtk_dialog_new_with_buttons (_("Geyes Preferences"), NULL, GTK_DIALOG_DESTROY_WITH_PARENT, GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE, GTK_STOCK_HELP, GTK_RESPONSE_HELP, NULL); gtk_window_set_screen (GTK_WINDOW (pbox), gtk_widget_get_screen (GTK_WIDGET (eyes_applet->applet))); gtk_widget_set_size_request (GTK_WIDGET (pbox), 300, 200); gtk_dialog_set_default_response(GTK_DIALOG (pbox), GTK_RESPONSE_CLOSE); gtk_container_set_border_width (GTK_CONTAINER (pbox), 5); gtk_box_set_spacing (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (pbox))), 2); g_signal_connect (pbox, "response", G_CALLBACK (presponse_cb), eyes_applet); vbox = gtk_vbox_new (FALSE, 0); gtk_container_set_border_width (GTK_CONTAINER (vbox), 5); gtk_widget_show (vbox); gtk_box_pack_start (GTK_BOX (gtk_dialog_get_content_area (GTK_DIALOG (pbox))), vbox, TRUE, TRUE, 0); categories_vbox = gtk_vbox_new (FALSE, 18); gtk_box_pack_start (GTK_BOX (vbox), categories_vbox, TRUE, TRUE, 0); gtk_widget_show (categories_vbox); category_vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (categories_vbox), category_vbox, TRUE, TRUE, 0); gtk_widget_show (category_vbox); title = g_strconcat ("<span weight=\"bold\">", _("Themes"), "</span>", NULL); label = gtk_label_new (_(title)); gtk_label_set_use_markup (GTK_LABEL (label), TRUE); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_box_pack_start (GTK_BOX (category_vbox), label, FALSE, FALSE, 0); g_free (title); hbox = gtk_hbox_new (FALSE, 0); gtk_box_pack_start (GTK_BOX (category_vbox), hbox, TRUE, TRUE, 0); gtk_widget_show (hbox); indent = gtk_label_new (HIG_IDENTATION); gtk_label_set_justify (GTK_LABEL (indent), GTK_JUSTIFY_LEFT); gtk_box_pack_start (GTK_BOX (hbox), indent, FALSE, FALSE, 0); gtk_widget_show (indent); control_vbox = gtk_vbox_new (FALSE, 6); gtk_box_pack_start (GTK_BOX (hbox), control_vbox, TRUE, TRUE, 0); gtk_widget_show (control_vbox); label = gtk_label_new_with_mnemonic (_("_Select a theme:")); gtk_misc_set_alignment (GTK_MISC (label), 0, 0.5); gtk_box_pack_start (GTK_BOX (control_vbox), label, FALSE, FALSE, 0); scrolled = gtk_scrolled_window_new (NULL, NULL); gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW (scrolled), GTK_SHADOW_IN); gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); model = gtk_list_store_new (TOTAL_COLS, G_TYPE_STRING, G_TYPE_STRING); tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (model)); gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (tree), FALSE); gtk_label_set_mnemonic_widget (GTK_LABEL (label), tree); g_object_unref (model); gtk_container_add (GTK_CONTAINER (scrolled), tree); cell = gtk_cell_renderer_text_new (); column = gtk_tree_view_column_new_with_attributes ("not used", cell, "text", COL_THEME_NAME, NULL); gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column); selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree)); g_signal_connect (selection, "changed", G_CALLBACK (theme_selected_cb), eyes_applet); if ( ! key_writable (eyes_applet->applet, "theme_path")) { gtk_widget_set_sensitive (tree, FALSE); gtk_widget_set_sensitive (label, FALSE); } for (i = 0; i < NUM_THEME_DIRECTORIES; i++) { if ((dfd = opendir (theme_directories[i])) != NULL) { while ((dp = readdir (dfd)) != NULL) { if (dp->d_name[0] != '.') { gchar *theme_dir; gchar *theme_name; #ifdef PATH_MAX strcpy (filename, theme_directories[i]); strcat (filename, dp->d_name); #else asprintf (&filename, theme_directories[i], dp->d_name); #endif theme_dir = g_strdup_printf ("%s/", filename); theme_name = g_path_get_basename (filename); gtk_list_store_append (model, &iter); gtk_list_store_set (model, &iter, COL_THEME_DIR, &filename, COL_THEME_NAME, theme_name, -1); if (!g_ascii_strncasecmp (eyes_applet->theme_dir, theme_dir, strlen (theme_dir))) { GtkTreePath *path; path = gtk_tree_model_get_path (GTK_TREE_MODEL (model), &iter); gtk_tree_view_set_cursor (GTK_TREE_VIEW (tree), path, NULL, FALSE); gtk_tree_path_free (path); } g_free (theme_name); g_free (theme_dir); } } closedir (dfd); } } #ifndef PATH_MAX g_free (filename); #endif gtk_box_pack_start (GTK_BOX (control_vbox), scrolled, TRUE, TRUE, 0); gtk_widget_show_all (pbox); eyes_applet->prop_box.pbox = pbox; return; }
void prop_cb (GtkAction *action, ProgressData *battstat) { GtkBuilder *builder; GtkWidget *combo_ptr, *spin_ptr; MateConfClient *client; GtkListStore *liststore; GtkCellRenderer *renderer; GtkTreeIter iter; /* Shouldn't this be used for something later on? */ gboolean inhibit_command_line; client = mateconf_client_get_default (); inhibit_command_line = mateconf_client_get_bool (client, "/desktop/mate/lockdown/inhibit_command_line", NULL); if (DEBUG) g_print("prop_cb()\n"); if (battstat->prop_win) { gtk_window_set_screen (GTK_WINDOW (battstat->prop_win), gtk_widget_get_screen (battstat->applet)); gtk_window_present (GTK_WINDOW (battstat->prop_win)); return; } builder = gtk_builder_new (); gtk_builder_add_from_file (builder, GTK_BUILDERDIR"/battstat_applet.ui", NULL); battstat->prop_win = GTK_DIALOG (gtk_builder_get_object (builder, "battstat_properties")); gtk_window_set_screen (GTK_WINDOW (battstat->prop_win), gtk_widget_get_screen (battstat->applet)); g_signal_connect (G_OBJECT (battstat->prop_win), "delete_event", G_CALLBACK (gtk_true), NULL); battstat->lowbatt_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "lowbatt_toggle")); g_signal_connect (G_OBJECT (battstat->lowbatt_toggle), "toggled", G_CALLBACK (lowbatt_toggled), battstat); if (!key_writable (MATE_PANEL_APPLET (battstat->applet), "low_battery_notification")) { hard_set_sensitive (battstat->lowbatt_toggle, FALSE); } battstat->hbox_ptr = GTK_WIDGET (gtk_builder_get_object (builder, "hbox_ptr")); hard_set_sensitive (battstat->hbox_ptr, battstat->lowbattnotification); combo_ptr = GTK_WIDGET (gtk_builder_get_object (builder, "combo_ptr")); g_signal_connect (G_OBJECT (combo_ptr), "changed", G_CALLBACK (combo_ptr_cb), battstat); liststore = gtk_list_store_new (1, G_TYPE_STRING); gtk_combo_box_set_model (GTK_COMBO_BOX (combo_ptr), GTK_TREE_MODEL (liststore)); gtk_cell_layout_clear (GTK_CELL_LAYOUT (combo_ptr)); renderer = gtk_cell_renderer_text_new (); gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (combo_ptr), renderer, TRUE); gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (combo_ptr), renderer, "text", 0, NULL); gtk_list_store_append (liststore, &iter); /* TRANSLATOR: this is a selectable item in a drop-down menu to end * this sentence: * "Warn when battery charge drops to: [XX] percent". */ gtk_list_store_set (liststore, &iter, 0, _("Percent"), -1); gtk_list_store_append (liststore, &iter); /* TRANSLATOR: this is a selectable item in a drop-down menu to end * this sentence: * "Warn when battery charge drops to: [XX] minutes remaining" */ gtk_list_store_set (liststore, &iter, 0, _("Minutes Remaining"), -1); spin_ptr = GTK_WIDGET (gtk_builder_get_object (builder, "spin_ptr")); gtk_spin_button_set_value (GTK_SPIN_BUTTON (spin_ptr), battstat->red_val); g_signal_connect (G_OBJECT (spin_ptr), "value-changed", G_CALLBACK (spin_ptr_cb), battstat); if (battstat->red_value_is_time) gtk_combo_box_set_active (GTK_COMBO_BOX (combo_ptr), 1); else gtk_combo_box_set_active (GTK_COMBO_BOX (combo_ptr), 0); battstat->full_toggle = GTK_WIDGET (gtk_builder_get_object (builder, "full_toggle")); g_signal_connect (G_OBJECT (battstat->full_toggle), "toggled", G_CALLBACK (full_toggled), battstat); if (!key_writable (MATE_PANEL_APPLET (battstat->applet), "full_battery_notification")) { hard_set_sensitive (battstat->full_toggle, FALSE); } if (battstat->fullbattnot) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (battstat->full_toggle), TRUE); } if (battstat->lowbattnotification) { gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (battstat->lowbatt_toggle), TRUE); } battstat->radio_traditional_battery = GTK_WIDGET (gtk_builder_get_object (builder, "battery_view_2")); g_signal_connect (G_OBJECT (battstat->radio_traditional_battery), "toggled", G_CALLBACK (radio_traditional_toggled), battstat); if (!key_writable (MATE_PANEL_APPLET (battstat->applet), "show_battery")) hard_set_sensitive (battstat->radio_traditional_battery, FALSE); if (battstat->showbattery) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (battstat->radio_traditional_battery), TRUE); } battstat->radio_ubuntu_battery = GTK_WIDGET (gtk_builder_get_object (builder, "battery_view")); g_signal_connect (G_OBJECT (battstat->radio_ubuntu_battery), "toggled", G_CALLBACK (radio_ubuntu_toggled), battstat); if (!key_writable (MATE_PANEL_APPLET (battstat->applet), "show_status")) hard_set_sensitive (battstat->radio_ubuntu_battery, FALSE); if (battstat->showstatus) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (battstat->radio_ubuntu_battery), TRUE); } battstat->radio_text_1 = GTK_WIDGET (gtk_builder_get_object (builder, "show_text_radio")); battstat->radio_text_2 = GTK_WIDGET (gtk_builder_get_object (builder, "show_text_radio_2")); battstat->check_text = GTK_WIDGET (gtk_builder_get_object (builder, "show_text_remaining")); g_object_unref (builder); g_signal_connect (G_OBJECT (battstat->radio_text_1), "toggled", G_CALLBACK (show_text_toggled), battstat); g_signal_connect (G_OBJECT (battstat->radio_text_2), "toggled", G_CALLBACK (show_text_toggled), battstat); g_signal_connect (G_OBJECT (battstat->check_text), "toggled", G_CALLBACK (show_text_toggled), battstat); if (!key_writable (MATE_PANEL_APPLET (battstat->applet), "show_text")) { hard_set_sensitive (battstat->check_text, FALSE); hard_set_sensitive (battstat->radio_text_1, FALSE); hard_set_sensitive (battstat->radio_text_2, FALSE); } if (battstat->showtext == APPLET_SHOW_PERCENT) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (battstat->check_text), TRUE); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (battstat->radio_text_2), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (battstat->radio_text_1), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (battstat->radio_text_2), TRUE); } else if (battstat->showtext == APPLET_SHOW_TIME) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (battstat->check_text), TRUE); gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (battstat->radio_text_1), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (battstat->radio_text_1), TRUE); gtk_widget_set_sensitive (GTK_WIDGET (battstat->radio_text_2), TRUE); } else /* APPLET_SHOW_NONE */ { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (battstat->check_text), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (battstat->radio_text_1), FALSE); gtk_widget_set_sensitive (GTK_WIDGET (battstat->radio_text_2), FALSE); } gtk_dialog_set_default_response (GTK_DIALOG (battstat->prop_win), GTK_RESPONSE_CLOSE); gtk_window_set_resizable (GTK_WINDOW (battstat->prop_win), FALSE); gtk_dialog_set_has_separator (GTK_DIALOG (battstat->prop_win), FALSE); g_signal_connect (G_OBJECT (battstat->prop_win), "response", G_CALLBACK (response_cb), battstat); gtk_widget_show_all (GTK_WIDGET (battstat->prop_win)); }