| File: | geyes/themes.c |
| Warning: | line 98, column 21 File position of the stream might be 'indeterminate' after a failed operation. Can cause undefined behavior |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* | |||
| 2 | * Copyright (C) 1999 Dave Camp <dave@davec.dhs.org> | |||
| 3 | * | |||
| 4 | * This program is free software; you can redistribute it and/or modify | |||
| 5 | * it under the terms of the GNU General Public License as published by | |||
| 6 | * the Free Software Foundation; either version 2 of the License, or | |||
| 7 | * (at your option) any later version. | |||
| 8 | * | |||
| 9 | * This program is distributed in the hope that it will be useful, | |||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |||
| 12 | * GNU General Public License for more details. | |||
| 13 | * | |||
| 14 | * You should have received a copy of the GNU General Public License | |||
| 15 | * along with this program; if not, write to the Free Software | |||
| 16 | * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. | |||
| 17 | * | |||
| 18 | */ | |||
| 19 | ||||
| 20 | #include <config.h> | |||
| 21 | #include <string.h> | |||
| 22 | #include <dirent.h> | |||
| 23 | #include <limits.h> | |||
| 24 | #include <ctype.h> | |||
| 25 | #include <ctk/ctk.h> | |||
| 26 | #include <gio/gio.h> | |||
| 27 | #include "geyes.h" | |||
| 28 | ||||
| 29 | #define NUM_THEME_DIRECTORIES2 2 | |||
| 30 | #define HIG_IDENTATION" " " " | |||
| 31 | ||||
| 32 | static char *theme_directories[NUM_THEME_DIRECTORIES2]; | |||
| 33 | ||||
| 34 | enum { | |||
| 35 | COL_THEME_DIR = 0, | |||
| 36 | COL_THEME_NAME, | |||
| 37 | TOTAL_COLS | |||
| 38 | }; | |||
| 39 | ||||
| 40 | void theme_dirs_create (void) | |||
| 41 | { | |||
| 42 | static gboolean themes_created = FALSE(0); | |||
| 43 | ||||
| 44 | if (themes_created == TRUE(!(0))) | |||
| 45 | return; | |||
| 46 | ||||
| 47 | theme_directories[0] = g_build_filename(GEYES_THEMES_DIR"/usr/share/cafe-applets/geyes/", NULL((void*)0)); | |||
| 48 | ||||
| 49 | theme_directories[1] = g_build_filename(g_get_user_config_dir(), "cafe", "geyes-themes", NULL((void*)0)); | |||
| 50 | ||||
| 51 | themes_created = TRUE(!(0)); | |||
| 52 | } | |||
| 53 | ||||
| 54 | static void | |||
| 55 | parse_theme_file (EyesApplet *eyes_applet, FILE *theme_file) | |||
| 56 | { | |||
| 57 | gchar line_buf [512]; /* prolly overkill */ | |||
| 58 | gchar *token; | |||
| 59 | ||||
| 60 | if (fgets (line_buf, 512, theme_file) == NULL((void*)0)) | |||
| 61 | printf("fgets error\n"); | |||
| 62 | ||||
| 63 | while (!feof (theme_file)) { | |||
| 64 | token = strtok (line_buf, "="); | |||
| 65 | if (strncmp (token, "wall-thickness", | |||
| 66 | strlen ("wall-thickness")) == 0) { | |||
| 67 | token += strlen ("wall-thickness"); | |||
| 68 | while (!isdigit (*token)((*__ctype_b_loc ())[(int) ((*token))] & (unsigned short int ) _ISdigit)) { | |||
| 69 | token++; | |||
| 70 | } | |||
| 71 | sscanf (token, "%d", &eyes_applet->wall_thickness); | |||
| 72 | } else if (strncmp (token, "num-eyes", strlen ("num-eyes")) == 0) { | |||
| 73 | token += strlen ("num-eyes"); | |||
| 74 | while (!isdigit (*token)((*__ctype_b_loc ())[(int) ((*token))] & (unsigned short int ) _ISdigit)) { | |||
| 75 | token++; | |||
| 76 | } | |||
| 77 | sscanf (token, "%d", &eyes_applet->num_eyes); | |||
| 78 | if (eyes_applet->num_eyes > MAX_EYES1000) | |||
| 79 | eyes_applet->num_eyes = MAX_EYES1000; | |||
| 80 | } else if (strncmp (token, "eye-pixmap", strlen ("eye-pixmap")) == 0) { | |||
| 81 | token = strtok (NULL((void*)0), "\""); | |||
| 82 | token = strtok (NULL((void*)0), "\""); | |||
| 83 | if (eyes_applet->eye_filename != NULL((void*)0)) | |||
| 84 | g_free (eyes_applet->eye_filename); | |||
| 85 | eyes_applet->eye_filename = g_strdup_printf ("%s%s", | |||
| 86 | eyes_applet->theme_dir, | |||
| 87 | token); | |||
| 88 | } else if (strncmp (token, "pupil-pixmap", strlen ("pupil-pixmap")) == 0) { | |||
| 89 | token = strtok (NULL((void*)0), "\""); | |||
| 90 | token = strtok (NULL((void*)0), "\""); | |||
| 91 | if (eyes_applet->pupil_filename != NULL((void*)0)) | |||
| 92 | g_free (eyes_applet->pupil_filename); | |||
| 93 | eyes_applet->pupil_filename | |||
| 94 | = g_strdup_printf ("%s%s", | |||
| 95 | eyes_applet->theme_dir, | |||
| 96 | token); | |||
| 97 | } | |||
| 98 | if (fgets (line_buf, 512, theme_file) == NULL((void*)0)) | |||
| ||||
| 99 | printf("fgets error\n"); | |||
| 100 | } | |||
| 101 | } | |||
| 102 | ||||
| 103 | int | |||
| 104 | load_theme (EyesApplet *eyes_applet, const gchar *theme_dir) | |||
| 105 | { | |||
| 106 | CtkWidget *dialog; | |||
| 107 | ||||
| 108 | FILE* theme_file; | |||
| 109 | gchar *file_name; | |||
| 110 | ||||
| 111 | eyes_applet->theme_dir = g_strdup_printf ("%s/", theme_dir); | |||
| 112 | ||||
| 113 | file_name = g_strdup_printf("%s%s",theme_dir,"/config"); | |||
| 114 | theme_file = fopen (file_name, "r"); | |||
| 115 | g_free (file_name); | |||
| 116 | if (theme_file
| |||
| 117 | g_free (eyes_applet->theme_dir); | |||
| 118 | eyes_applet->theme_dir = g_strdup_printf (GEYES_THEMES_DIR"/usr/share/cafe-applets/geyes/" "Default-tiny/"); | |||
| 119 | theme_file = fopen (GEYES_THEMES_DIR"/usr/share/cafe-applets/geyes/" "Default-tiny/config", "r"); | |||
| 120 | } | |||
| 121 | ||||
| 122 | /* if it's still NULL we've got a major problem */ | |||
| 123 | if (theme_file
| |||
| 124 | dialog = ctk_message_dialog_new_with_markup (NULL((void*)0), | |||
| 125 | CTK_DIALOG_DESTROY_WITH_PARENT, | |||
| 126 | CTK_MESSAGE_ERROR, | |||
| 127 | CTK_BUTTONS_OK, | |||
| 128 | "<b>%s</b>\n\n%s", | |||
| 129 | _("Can not launch the eyes applet.")gettext ("Can not launch the eyes applet."), | |||
| 130 | _("There was a fatal error while trying to load the theme.")gettext ("There was a fatal error while trying to load the theme." )); | |||
| 131 | ||||
| 132 | ctk_dialog_run (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ()))))))); | |||
| 133 | ctk_widget_destroy (dialog); | |||
| 134 | ||||
| 135 | ctk_widget_destroy (CTK_WIDGET (eyes_applet->applet)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((eyes_applet->applet)), ((ctk_widget_get_type ()))))))); | |||
| 136 | ||||
| 137 | return FALSE(0); | |||
| 138 | } | |||
| 139 | ||||
| 140 | parse_theme_file (eyes_applet, theme_file); | |||
| 141 | fclose (theme_file); | |||
| 142 | ||||
| 143 | eyes_applet->theme_name = g_strdup (theme_dir)g_strdup_inline (theme_dir); | |||
| 144 | ||||
| 145 | if (eyes_applet->eye_image) | |||
| 146 | g_object_unref (eyes_applet->eye_image); | |||
| 147 | eyes_applet->eye_image = gdk_pixbuf_new_from_file (eyes_applet->eye_filename, NULL((void*)0)); | |||
| 148 | if (eyes_applet->pupil_image) | |||
| 149 | g_object_unref (eyes_applet->pupil_image); | |||
| 150 | eyes_applet->pupil_image = gdk_pixbuf_new_from_file (eyes_applet->pupil_filename, NULL((void*)0)); | |||
| 151 | ||||
| 152 | eyes_applet->eye_height = gdk_pixbuf_get_height (eyes_applet->eye_image); | |||
| 153 | eyes_applet->eye_width = gdk_pixbuf_get_width (eyes_applet->eye_image); | |||
| 154 | eyes_applet->pupil_height = gdk_pixbuf_get_height (eyes_applet->pupil_image); | |||
| 155 | eyes_applet->pupil_width = gdk_pixbuf_get_width (eyes_applet->pupil_image); | |||
| 156 | ||||
| 157 | return TRUE(!(0)); | |||
| 158 | } | |||
| 159 | ||||
| 160 | static void | |||
| 161 | destroy_theme (EyesApplet *eyes_applet) | |||
| 162 | { | |||
| 163 | /* Dunno about this - to unref or not to unref? */ | |||
| 164 | if (eyes_applet->eye_image != NULL((void*)0)) { | |||
| 165 | g_object_unref (eyes_applet->eye_image); | |||
| 166 | eyes_applet->eye_image = NULL((void*)0); | |||
| 167 | } | |||
| 168 | if (eyes_applet->pupil_image != NULL((void*)0)) { | |||
| 169 | g_object_unref (eyes_applet->pupil_image); | |||
| 170 | eyes_applet->pupil_image = NULL((void*)0); | |||
| 171 | } | |||
| 172 | ||||
| 173 | g_free (eyes_applet->theme_dir); | |||
| 174 | g_free (eyes_applet->theme_name); | |||
| 175 | } | |||
| 176 | ||||
| 177 | static void | |||
| 178 | theme_selected_cb (CtkTreeSelection *selection, gpointer data) | |||
| 179 | { | |||
| 180 | EyesApplet *eyes_applet = data; | |||
| 181 | CtkTreeModel *model; | |||
| 182 | CtkTreeIter iter; | |||
| 183 | gchar *theme; | |||
| 184 | gchar *theme_dir; | |||
| 185 | ||||
| 186 | if (!ctk_tree_selection_get_selected (selection, &model, &iter)) | |||
| ||||
| 187 | return; | |||
| 188 | ||||
| 189 | ctk_tree_model_get (model, &iter, COL_THEME_DIR, &theme, -1); | |||
| 190 | ||||
| 191 | g_return_if_fail (theme)do { if ((theme)) { } else { g_return_if_fail_warning (((gchar *) 0), ((const char*) (__func__)), "theme"); return; } } while (0); | |||
| 192 | ||||
| 193 | theme_dir = g_strdup_printf ("%s/", theme); | |||
| 194 | if (!g_ascii_strncasecmp (theme_dir, eyes_applet->theme_dir, strlen (theme_dir))) { | |||
| 195 | g_free (theme_dir); | |||
| 196 | return; | |||
| 197 | } | |||
| 198 | g_free (theme_dir); | |||
| 199 | ||||
| 200 | destroy_eyes (eyes_applet); | |||
| 201 | destroy_theme (eyes_applet); | |||
| 202 | load_theme (eyes_applet, theme); | |||
| 203 | setup_eyes (eyes_applet); | |||
| 204 | ||||
| 205 | g_settings_set_string ( | |||
| 206 | eyes_applet->settings, "theme-path", theme); | |||
| 207 | ||||
| 208 | g_free (theme); | |||
| 209 | } | |||
| 210 | ||||
| 211 | static void | |||
| 212 | phelp_cb (CtkDialog *dialog) | |||
| 213 | { | |||
| 214 | GError *error = NULL((void*)0); | |||
| 215 | ||||
| 216 | ctk_show_uri_on_window (CTK_WINDOW (dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_window_get_type ())))))), | |||
| 217 | "help:cafe-geyes/geyes-settings", | |||
| 218 | ctk_get_current_event_time (), | |||
| 219 | &error); | |||
| 220 | ||||
| 221 | if (error) { | |||
| 222 | CtkWidget *error_dialog = ctk_message_dialog_new (NULL((void*)0), CTK_DIALOG_MODAL, CTK_MESSAGE_ERROR, CTK_BUTTONS_CLOSE, | |||
| 223 | _("There was an error displaying help: %s")gettext ("There was an error displaying help: %s"), error->message); | |||
| 224 | g_signal_connect (G_OBJECT (error_dialog), "response", G_CALLBACK (ctk_widget_destroy) , NULL)g_signal_connect_data ((((((GObject*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((error_dialog)), (((GType) ((20) << (2))))))))), ("response"), (((GCallback) (ctk_widget_destroy ))), (((void*)0)), ((void*)0), (GConnectFlags) 0); | |||
| 225 | ctk_window_set_resizable (CTK_WINDOW (error_dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((error_dialog)), ((ctk_window_get_type ())))))), FALSE(0)); | |||
| 226 | ctk_window_set_screen (CTK_WINDOW (error_dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((error_dialog)), ((ctk_window_get_type ())))))), ctk_widget_get_screen (CTK_WIDGET (dialog)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_widget_get_type ())))))))); | |||
| 227 | ctk_widget_show (error_dialog); | |||
| 228 | g_error_free (error); | |||
| 229 | error = NULL((void*)0); | |||
| 230 | } | |||
| 231 | } | |||
| 232 | ||||
| 233 | static void | |||
| 234 | presponse_cb (CtkDialog *dialog, gint id, gpointer data) | |||
| 235 | { | |||
| 236 | EyesApplet *eyes_applet = data; | |||
| 237 | if(id == CTK_RESPONSE_HELP){ | |||
| 238 | phelp_cb (dialog); | |||
| 239 | return; | |||
| 240 | } | |||
| 241 | ||||
| 242 | ||||
| 243 | ctk_widget_destroy (CTK_WIDGET (dialog)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_widget_get_type ()))))))); | |||
| 244 | ||||
| 245 | eyes_applet->prop_box.pbox = NULL((void*)0); | |||
| 246 | } | |||
| 247 | ||||
| 248 | void | |||
| 249 | properties_cb (CtkAction *action G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 250 | EyesApplet *eyes_applet) | |||
| 251 | { | |||
| 252 | CtkWidget *pbox, *hbox; | |||
| 253 | CtkWidget *vbox, *indent; | |||
| 254 | CtkWidget *categories_vbox; | |||
| 255 | CtkWidget *category_vbox, *control_vbox; | |||
| 256 | CtkWidget *tree; | |||
| 257 | CtkWidget *scrolled; | |||
| 258 | CtkWidget *label; | |||
| 259 | CtkListStore *model; | |||
| 260 | CtkTreeViewColumn *column; | |||
| 261 | CtkCellRenderer *cell; | |||
| 262 | CtkTreeSelection *selection; | |||
| 263 | CtkTreeIter iter; | |||
| 264 | DIR *dfd; | |||
| 265 | struct dirent *dp; | |||
| 266 | int i; | |||
| 267 | #ifdef PATH_MAX4096 | |||
| 268 | gchar filename [PATH_MAX4096]; | |||
| 269 | #else | |||
| 270 | gchar *filename; | |||
| 271 | #endif | |||
| 272 | gchar *title; | |||
| 273 | ||||
| 274 | if (eyes_applet->prop_box.pbox) { | |||
| 275 | ctk_window_set_screen ( | |||
| 276 | CTK_WINDOW (eyes_applet->prop_box.pbox)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((eyes_applet->prop_box.pbox)), ((ctk_window_get_type ( ))))))), | |||
| 277 | ctk_widget_get_screen (CTK_WIDGET (eyes_applet->applet)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((eyes_applet->applet)), ((ctk_widget_get_type ())))))))); | |||
| 278 | ctk_window_present (CTK_WINDOW (eyes_applet->prop_box.pbox)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((eyes_applet->prop_box.pbox)), ((ctk_window_get_type ( )))))))); | |||
| 279 | return; | |||
| 280 | } | |||
| 281 | ||||
| 282 | pbox = ctk_dialog_new_with_buttons (_("Eyes Preferences")gettext ("Eyes Preferences"), NULL((void*)0), | |||
| 283 | CTK_DIALOG_DESTROY_WITH_PARENT, | |||
| 284 | "ctk-close", CTK_RESPONSE_CLOSE, | |||
| 285 | "ctk-help", CTK_RESPONSE_HELP, | |||
| 286 | NULL((void*)0)); | |||
| 287 | ||||
| 288 | ctk_window_set_screen (CTK_WINDOW (pbox)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((pbox)), ((ctk_window_get_type ())))))), | |||
| 289 | ctk_widget_get_screen (CTK_WIDGET (eyes_applet->applet)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((eyes_applet->applet)), ((ctk_widget_get_type ())))))))); | |||
| 290 | ||||
| 291 | ctk_widget_set_size_request (CTK_WIDGET (pbox)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((pbox)), ((ctk_widget_get_type ())))))), 300, 200); | |||
| 292 | ctk_dialog_set_default_response(CTK_DIALOG (pbox)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((pbox)), ((ctk_dialog_get_type ())))))), CTK_RESPONSE_CLOSE); | |||
| 293 | ctk_container_set_border_width (CTK_CONTAINER (pbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((pbox)), ((ctk_container_get_type ())))))), 5); | |||
| 294 | ctk_box_set_spacing (CTK_BOX (ctk_dialog_get_content_area (CTK_DIALOG (pbox)))((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((ctk_dialog_get_content_area (((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((pbox)), ((ctk_dialog_get_type ())))))))) ), ((ctk_box_get_type ())))))), 2); | |||
| 295 | ||||
| 296 | g_signal_connect (pbox, "response",g_signal_connect_data ((pbox), ("response"), (((GCallback) (presponse_cb ))), (eyes_applet), ((void*)0), (GConnectFlags) 0) | |||
| 297 | G_CALLBACK (presponse_cb),g_signal_connect_data ((pbox), ("response"), (((GCallback) (presponse_cb ))), (eyes_applet), ((void*)0), (GConnectFlags) 0) | |||
| 298 | eyes_applet)g_signal_connect_data ((pbox), ("response"), (((GCallback) (presponse_cb ))), (eyes_applet), ((void*)0), (GConnectFlags) 0); | |||
| 299 | ||||
| 300 | vbox = ctk_box_new (CTK_ORIENTATION_VERTICAL, 0); | |||
| 301 | ctk_container_set_border_width (CTK_CONTAINER (vbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbox)), ((ctk_container_get_type ())))))), 5); | |||
| 302 | ctk_widget_show (vbox); | |||
| 303 | ||||
| 304 | ctk_box_pack_start (CTK_BOX (ctk_dialog_get_content_area (CTK_DIALOG (pbox)))((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((ctk_dialog_get_content_area (((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((pbox)), ((ctk_dialog_get_type ())))))))) ), ((ctk_box_get_type ())))))), vbox, | |||
| 305 | TRUE(!(0)), TRUE(!(0)), 0); | |||
| 306 | ||||
| 307 | categories_vbox = ctk_box_new (CTK_ORIENTATION_VERTICAL, 18); | |||
| 308 | ctk_box_pack_start (CTK_BOX (vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbox)), ((ctk_box_get_type ())))))), categories_vbox, TRUE(!(0)), TRUE(!(0)), 0); | |||
| 309 | ctk_widget_show (categories_vbox); | |||
| 310 | ||||
| 311 | category_vbox = ctk_box_new (CTK_ORIENTATION_VERTICAL, 6); | |||
| 312 | ctk_box_pack_start (CTK_BOX (categories_vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((categories_vbox)), ((ctk_box_get_type ())))))), category_vbox, TRUE(!(0)), TRUE(!(0)), 0); | |||
| 313 | ctk_widget_show (category_vbox); | |||
| 314 | ||||
| 315 | title = g_strconcat ("<span weight=\"bold\">", _("Themes")gettext ("Themes"), "</span>", NULL((void*)0)); | |||
| 316 | label = ctk_label_new (_(title)gettext (title)); | |||
| 317 | ctk_label_set_use_markup (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), TRUE(!(0))); | |||
| 318 | ctk_label_set_justify (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), CTK_JUSTIFY_LEFT); | |||
| 319 | ctk_label_set_xalign (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), 0.0); | |||
| 320 | ctk_box_pack_start (CTK_BOX (category_vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((category_vbox)), ((ctk_box_get_type ())))))), label, FALSE(0), FALSE(0), 0); | |||
| 321 | g_free (title); | |||
| 322 | ||||
| 323 | hbox = ctk_box_new (CTK_ORIENTATION_HORIZONTAL, 0); | |||
| 324 | ctk_box_pack_start (CTK_BOX (category_vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((category_vbox)), ((ctk_box_get_type ())))))), hbox, TRUE(!(0)), TRUE(!(0)), 0); | |||
| 325 | ctk_widget_show (hbox); | |||
| 326 | ||||
| 327 | indent = ctk_label_new (HIG_IDENTATION" "); | |||
| 328 | ctk_label_set_justify (CTK_LABEL (indent)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((indent)), ((ctk_label_get_type ())))))), CTK_JUSTIFY_LEFT); | |||
| 329 | ctk_box_pack_start (CTK_BOX (hbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), ((ctk_box_get_type ())))))), indent, FALSE(0), FALSE(0), 0); | |||
| 330 | ctk_widget_show (indent); | |||
| 331 | ||||
| 332 | control_vbox = ctk_box_new (CTK_ORIENTATION_VERTICAL, 6); | |||
| 333 | ctk_box_pack_start (CTK_BOX (hbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((hbox)), ((ctk_box_get_type ())))))), control_vbox, TRUE(!(0)), TRUE(!(0)), 0); | |||
| 334 | ctk_widget_show (control_vbox); | |||
| 335 | ||||
| 336 | label = ctk_label_new_with_mnemonic (_("_Select a theme:")gettext ("_Select a theme:")); | |||
| 337 | ctk_label_set_xalign (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), 0.0); | |||
| 338 | ctk_box_pack_start (CTK_BOX (control_vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((control_vbox)), ((ctk_box_get_type ())))))), label, FALSE(0), FALSE(0), 0); | |||
| 339 | ||||
| 340 | scrolled = ctk_scrolled_window_new (NULL((void*)0), NULL((void*)0)); | |||
| 341 | ctk_scrolled_window_set_shadow_type (CTK_SCROLLED_WINDOW (scrolled)((((CtkScrolledWindow*) (void *) g_type_check_instance_cast ( (GTypeInstance*) ((scrolled)), ((ctk_scrolled_window_get_type ())))))), CTK_SHADOW_IN); | |||
| 342 | ctk_scrolled_window_set_policy (CTK_SCROLLED_WINDOW (scrolled)((((CtkScrolledWindow*) (void *) g_type_check_instance_cast ( (GTypeInstance*) ((scrolled)), ((ctk_scrolled_window_get_type ())))))), | |||
| 343 | CTK_POLICY_AUTOMATIC, | |||
| 344 | CTK_POLICY_AUTOMATIC); | |||
| 345 | ||||
| 346 | model = ctk_list_store_new (TOTAL_COLS, G_TYPE_STRING((GType) ((16) << (2))), G_TYPE_STRING((GType) ((16) << (2)))); | |||
| 347 | tree = ctk_tree_view_new_with_model (CTK_TREE_MODEL (model)((((CtkTreeModel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), ((ctk_tree_model_get_type ()))))))); | |||
| 348 | ctk_tree_view_set_headers_visible (CTK_TREE_VIEW (tree)((((CtkTreeView*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((tree)), ((ctk_tree_view_get_type ())))))), FALSE(0)); | |||
| 349 | ctk_label_set_mnemonic_widget (CTK_LABEL (label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((label)), ((ctk_label_get_type ())))))), tree); | |||
| 350 | g_object_unref (model); | |||
| 351 | ||||
| 352 | ctk_container_add (CTK_CONTAINER (scrolled)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((scrolled)), ((ctk_container_get_type ())))))), tree); | |||
| 353 | ||||
| 354 | cell = ctk_cell_renderer_text_new (); | |||
| 355 | column = ctk_tree_view_column_new_with_attributes ("not used", cell, | |||
| 356 | "text", COL_THEME_NAME, NULL((void*)0)); | |||
| 357 | ctk_tree_view_append_column (CTK_TREE_VIEW (tree)((((CtkTreeView*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((tree)), ((ctk_tree_view_get_type ())))))), column); | |||
| 358 | ||||
| 359 | selection = ctk_tree_view_get_selection (CTK_TREE_VIEW (tree)((((CtkTreeView*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((tree)), ((ctk_tree_view_get_type ()))))))); | |||
| 360 | g_signal_connect (selection, "changed",g_signal_connect_data ((selection), ("changed"), (((GCallback ) (theme_selected_cb))), (eyes_applet), ((void*)0), (GConnectFlags ) 0) | |||
| 361 | G_CALLBACK (theme_selected_cb),g_signal_connect_data ((selection), ("changed"), (((GCallback ) (theme_selected_cb))), (eyes_applet), ((void*)0), (GConnectFlags ) 0) | |||
| 362 | eyes_applet)g_signal_connect_data ((selection), ("changed"), (((GCallback ) (theme_selected_cb))), (eyes_applet), ((void*)0), (GConnectFlags ) 0); | |||
| 363 | ||||
| 364 | if ( ! g_settings_is_writable (eyes_applet->settings, "theme-path")) { | |||
| 365 | ctk_widget_set_sensitive (tree, FALSE(0)); | |||
| 366 | ctk_widget_set_sensitive (label, FALSE(0)); | |||
| 367 | } | |||
| 368 | ||||
| 369 | for (i = 0; i < NUM_THEME_DIRECTORIES2; i++) { | |||
| 370 | if ((dfd = opendir (theme_directories[i])) != NULL((void*)0)) { | |||
| 371 | while ((dp = readdir (dfd)) != NULL((void*)0)) { | |||
| 372 | if (dp->d_name[0] != '.') { | |||
| 373 | gchar *theme_dir; | |||
| 374 | gchar *theme_name; | |||
| 375 | #ifdef PATH_MAX4096 | |||
| 376 | strcpy (filename, | |||
| 377 | theme_directories[i]); | |||
| 378 | strcat (filename, dp->d_name); | |||
| 379 | #else | |||
| 380 | asprintf (&filename, theme_directories[i], dp->d_name); | |||
| 381 | #endif | |||
| 382 | theme_dir = g_strdup_printf ("%s/", filename); | |||
| 383 | theme_name = g_path_get_basename (filename); | |||
| 384 | ||||
| 385 | ctk_list_store_append (model, &iter); | |||
| 386 | ctk_list_store_set (model, &iter, | |||
| 387 | COL_THEME_DIR, &filename, | |||
| 388 | COL_THEME_NAME, theme_name, | |||
| 389 | -1); | |||
| 390 | ||||
| 391 | if (!g_ascii_strncasecmp (eyes_applet->theme_dir, theme_dir, strlen (theme_dir))) { | |||
| 392 | CtkTreePath *path; | |||
| 393 | path = ctk_tree_model_get_path (CTK_TREE_MODEL (model)((((CtkTreeModel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((model)), ((ctk_tree_model_get_type ())))))), | |||
| 394 | &iter); | |||
| 395 | ctk_tree_view_set_cursor (CTK_TREE_VIEW (tree)((((CtkTreeView*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((tree)), ((ctk_tree_view_get_type ())))))), | |||
| 396 | path, | |||
| 397 | NULL((void*)0), | |||
| 398 | FALSE(0)); | |||
| 399 | ctk_tree_path_free (path); | |||
| 400 | } | |||
| 401 | g_free (theme_name); | |||
| 402 | g_free (theme_dir); | |||
| 403 | } | |||
| 404 | } | |||
| 405 | closedir (dfd); | |||
| 406 | } | |||
| 407 | } | |||
| 408 | #ifndef PATH_MAX4096 | |||
| 409 | g_free (filename); | |||
| 410 | #endif | |||
| 411 | ||||
| 412 | ctk_box_pack_start (CTK_BOX (control_vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((control_vbox)), ((ctk_box_get_type ())))))), scrolled, TRUE(!(0)), TRUE(!(0)), 0); | |||
| 413 | ||||
| 414 | ctk_widget_show_all (pbox); | |||
| 415 | ||||
| 416 | eyes_applet->prop_box.pbox = pbox; | |||
| 417 | ||||
| 418 | return; | |||
| 419 | } | |||
| 420 | ||||
| 421 |