static void background_color_set (GtkColorButton *color_button, MCData *mc) { GdkColor color; gtk_color_button_get_color (color_button, &color); panel_applet_gconf_set_int (mc->applet, "cmd_line_color_bg_r", (int) color.red, NULL); panel_applet_gconf_set_int (mc->applet, "cmd_line_color_bg_g", (int) color.green, NULL); panel_applet_gconf_set_int (mc->applet, "cmd_line_color_bg_b", (int) color.blue, NULL); }
/* called when maximum width spin button is changed * check if we drop below min width * saves numeric GConf preference values */ static void spin_maximum_size_changed (GtkSpinButton *button, TasklistData *tasklist) { GtkSpinButton *min_b = GTK_SPIN_BUTTON (tasklist->minimum_size_spin); PanelApplet *applet = PANEL_APPLET (tasklist->applet); gint prop_value = gtk_spin_button_get_value (button); gint min_size = gtk_spin_button_get_value (min_b); /* check if we drop below min width */ if (prop_value < min_size) panel_applet_gconf_set_int (applet, "minimum_size", prop_value, NULL); panel_applet_gconf_set_int (applet, "maximum_size", prop_value, NULL); }
static void num_rows_value_changed (GtkSpinButton *button, PagerData *pager) { panel_applet_gconf_set_int (PANEL_APPLET (pager->applet), "num_rows", gtk_spin_button_get_value_as_int (button), NULL); }
static void size_value_changed (GtkSpinButton *spinner, MCData *mc) { int size; size = gtk_spin_button_get_value (spinner); if (size == mc->preferences.normal_size_x) return; panel_applet_gconf_set_int (mc->applet, "normal_size_x", size, NULL); }
void appconf_save(struct app_t *app) { CfaPreferences *prefs = app->prefs; PanelApplet *applet = app->applet; GList *cond_list, *lp; gint i; panel_applet_gconf_set_string(applet, "font_auto", cfa_preferences_get_font_name(prefs, CFA_DESIGN_FONT_NAME_AUTO), NULL); panel_applet_gconf_set_string(applet, "bg_color_auto", cfa_preferences_get_color_name(prefs, CFA_DESIGN_BG_COLOR_AUTO), NULL); panel_applet_gconf_set_string(applet, "font_color_auto", cfa_preferences_get_color_name(prefs, CFA_DESIGN_FONT_COLOR_AUTO), NULL); panel_applet_gconf_set_string(applet, "arc_color_auto", cfa_preferences_get_color_name(prefs, CFA_DESIGN_ARC_COLOR_AUTO), NULL); panel_applet_gconf_set_string(applet, "hand_color_auto", cfa_preferences_get_color_name(prefs, CFA_DESIGN_HAND_COLOR_AUTO), NULL); panel_applet_gconf_set_string(applet, "font_manual", cfa_preferences_get_font_name(prefs, CFA_DESIGN_FONT_NAME_MANUAL), NULL); panel_applet_gconf_set_string(applet, "bg_color_manual", cfa_preferences_get_color_name(prefs, CFA_DESIGN_BG_COLOR_MANUAL), NULL); panel_applet_gconf_set_string(applet, "font_color_manual", cfa_preferences_get_color_name(prefs, CFA_DESIGN_FONT_COLOR_MANUAL), NULL); panel_applet_gconf_set_string(applet, "arc_color_manual", cfa_preferences_get_color_name(prefs, CFA_DESIGN_ARC_COLOR_MANUAL), NULL); panel_applet_gconf_set_string(applet, "hand_color_manual", cfa_preferences_get_color_name(prefs, CFA_DESIGN_HAND_COLOR_MANUAL), NULL); panel_applet_gconf_set_string(applet, "drag_color_manual", cfa_preferences_get_color_name(prefs, CFA_DESIGN_DRAG_COLOR_MANUAL), NULL); cond_list = cfa_preferences_get_cond_list(prefs); panel_applet_gconf_set_int(applet, "nconds", g_list_length(cond_list), NULL); for (lp = cond_list, i = 0; lp != NULL; lp = g_list_next(lp), i++) { gchar key[64]; CfaCond *cond = lp->data; make_cond_key(key, sizeof key, i, "use_cpu"); panel_applet_gconf_set_bool(applet, key, cfa_cond_get_use_cpu(cond), NULL); make_cond_key(key, sizeof key, i, "cpu_id"); panel_applet_gconf_set_int(applet, key, cfa_cond_get_cpu_id(cond), NULL); make_cond_key(key, sizeof key, i, "use_ac"); panel_applet_gconf_set_bool(applet, key, cfa_cond_get_use_ac(cond), NULL); make_cond_key(key, sizeof key, i, "ac"); panel_applet_gconf_set_bool(applet, key, cfa_cond_get_ac(cond), NULL); make_cond_key(key, sizeof key, i, "use_battery"); panel_applet_gconf_set_bool(applet, key, cfa_cond_get_use_battery(cond), NULL); make_cond_key(key, sizeof key, i, "battery"); panel_applet_gconf_set_string(applet, key, cfa_cond_get_battery(cond), NULL); make_cond_key(key, sizeof key, i, "use_load"); panel_applet_gconf_set_bool(applet, key, cfa_cond_get_use_load(cond), NULL); make_cond_key(key, sizeof key, i, "load"); panel_applet_gconf_set_string(applet, key, cfa_cond_get_load(cond), NULL); make_cond_key(key, sizeof key, i, "use_process"); panel_applet_gconf_set_bool(applet, key, cfa_cond_get_use_process(cond), NULL); make_cond_key(key, sizeof key, i, "process"); panel_applet_gconf_set_string(applet, key, cfa_cond_get_process(cond), NULL); make_cond_key(key, sizeof key, i, "freq"); panel_applet_gconf_set_string(applet, key, cfa_cond_get_freq(cond), NULL); } panel_applet_gconf_set_bool(applet, "smooth", cfa_preferences_get_smooth(prefs), NULL); }
gboolean applet_main (MyPanelApplet *applet_widget, const gchar *iid, gpointer data) { streamer_applet *applet; char *zErrMsg; int res, i; char ui[24576]; if (strcmp (iid, APPLET_ID) != 0) return FALSE; // i18n setlocale (LC_ALL, ""); bindtextdomain (PACKAGE_NAME, LOCALEDIR); bind_textdomain_codeset(PACKAGE_NAME, "utf-8"); textdomain (PACKAGE_NAME); // Init applet = g_malloc0(sizeof(streamer_applet)); applet->applet = applet_widget; memset(&applet->xml_listen_url[0], '\0', 1024); memset(&applet->xml_bitrate[0], '\0', 1024); memset(&applet->xml_server_name[0], '\0', 1024); memset(&applet->xml_genre[0], '\0', 1024); memset(&applet->url[0], '\0', 1024); memset(&applet->ui_fav[0], '\0', 10240); memset(&applet->ui_recent[0], '\0', 10240); applet->timestamp = time(NULL); applet->xml_curr_entries = 0; applet->icecast_total_entries = 0; applet->status = 0; for (i=0; i<10; i++) { memset(&applet->hash_fav[i].hash[0], '\0', 64); memset(&applet->hash_recent[i].hash[0], '\0', 64); } applet->settings.show_notifications = 0; applet->settings.duration_notifications = 5; #ifdef HAVE_GNOME_2 applet->bonobo_counter = 0; #endif // Check home dir, copy skel database char applet_home_dir[1024], skel_file[1024], local_file[1024]; struct stat stat_buf; struct passwd *pw = getpwuid(getuid()); sprintf(&applet_home_dir[0], "%s/%s", pw->pw_dir, APPLET_HOME_DIR); int stat_res = stat(&applet_home_dir[0], &stat_buf); int errsv = errno; if ((stat_res == 0) && (!S_ISDIR(stat_buf.st_mode))){ push_notification(_("Streamer Applet Error"), _("Cannot access configuration directory. Exiting."), NULL, DEFAULT_NOTIFICATION_DURATION); return FALSE; } else if (stat_res == -1) { if (errsv == ENOENT) { int mkdir_res = mkdir(&applet_home_dir[0], 0755); if (mkdir_res == 1) { push_notification(_("Streamer Applet Error"), _("Cannot create configuration directory. Exiting."), NULL, DEFAULT_NOTIFICATION_DURATION); return FALSE; } } else { push_notification(_("Streamer Applet Error"), _("Cannot verify configuration directory. Exiting."), NULL, DEFAULT_NOTIFICATION_DURATION); return FALSE; } } sprintf(&skel_file[0], "%s/%s", APPLET_SKEL_PATH, APPLET_SQLITE_DB_FILENAME); sprintf(&local_file[0], "%s/%s/%s", pw->pw_dir, APPLET_HOME_DIR, APPLET_SQLITE_DB_FILENAME); stat_res = stat(&local_file[0], &stat_buf); errsv = errno; if ((stat_res == 0) && (!S_ISREG(stat_buf.st_mode))){ push_notification(_("Streamer Applet Error"), _("Database file is not a regular file. Exiting."), NULL, DEFAULT_NOTIFICATION_DURATION); } else if (stat_res == -1) { if (errsv == ENOENT) { if (!cp(&local_file[0], &skel_file[0])) { push_notification(_("Streamer Applet Error"), _("Cannot copy database file to configuration directory. Exiting."), NULL, DEFAULT_NOTIFICATION_DURATION); return FALSE; } } else { push_notification(_("Streamer Applet Error"), _("Cannot verify database file. Exiting."), NULL, DEFAULT_NOTIFICATION_DURATION); return FALSE; } } // Test DB connection, upgrade DB if necessary if (!sqlite_connect(applet)) { push_notification(_("Streamer Applet Error"), _("Unable to connect to DB. Exiting."), NULL, DEFAULT_NOTIFICATION_DURATION); return FALSE; } zErrMsg = 0; res = sqlite3_exec(applet->sqlite, "SELECT version FROM version", cb_sql_version, (void*) applet, &zErrMsg); if (res != SQLITE_OK) { push_notification(_("Streamer Applet Error"), zErrMsg, NULL, DEFAULT_NOTIFICATION_DURATION); sqlite3_free(zErrMsg); return FALSE; } if (applet->db_version == 1) { // Upgrade DB to version 2 sqlite_insert(applet, "CREATE TABLE custom_stations (server_name VARCHAR(255), listen_url VARCHAR(255), bitrate VARCHAR(255), genre VARCHAR(255))"); sqlite_insert(applet, "ALTER TABLE stations RENAME TO icecast_stations"); sqlite_insert(applet, "UPDATE version SET version=2"); } else if (applet->db_version == 2) { // Upgrade DB to version 3 sqlite_insert(applet, "CREATE TABLE rbrowser_stations (server_name VARCHAR(255), listen_url VARCHAR(255), bitrate VARCHAR(255), genre VARCHAR(255))"); sqlite_insert(applet, "UPDATE version SET version=3"); } sqlite3_close(applet->sqlite); // Init GStreamer gstreamer_init(applet); // Get an image char image_file[1024]; sprintf(&image_file[0], "%s/%s", APPLET_ICON_PATH, APPLET_ICON_PAUSE); applet->image = gtk_image_new_from_file (&image_file[0]); // Put the image into a container (it needs to receive actions) applet->event_box = gtk_event_box_new(); gtk_container_add (GTK_CONTAINER (applet->event_box), applet->image); // Put the container into the applet gtk_container_add (GTK_CONTAINER (applet->applet), applet->event_box); // Define menu action group #ifdef HAVE_MATE applet->action_group = gtk_action_group_new ("Streamer_Applet_Actions"); gtk_action_group_set_translation_domain(applet->action_group, PACKAGE_NAME); gtk_action_group_add_actions (applet->action_group, applet_menu_actions_mate, G_N_ELEMENTS (applet_menu_actions_mate), applet); #endif // Get last 10 entried from Recent & Fav, then fetch last URL if (!sqlite_connect(applet)) return FALSE; zErrMsg = 0; memset(&applet->ui_recent[0], '\0', 1); res = sqlite3_exec(applet->sqlite, "SELECT server_name, listen_url FROM recent GROUP BY listen_url ORDER BY unix_timestamp DESC LIMIT 10", cb_sql_recent_10, (void*) applet, &zErrMsg); if (res != SQLITE_OK) { push_notification(_("Streamer Applet Error"), zErrMsg, NULL, DEFAULT_NOTIFICATION_DURATION); sqlite3_free(zErrMsg); return FALSE; } memset(&applet->ui_fav[0], '\0', 1); res = sqlite3_exec(applet->sqlite, "SELECT server_name, listen_url FROM favourites LIMIT 10", cb_sql_fav_10, (void*) applet, &zErrMsg); if (res != SQLITE_OK) { push_notification(_("Streamer Applet Error"), zErrMsg, NULL, DEFAULT_NOTIFICATION_DURATION); sqlite3_free(zErrMsg); return FALSE; } res = sqlite3_exec(applet->sqlite, "SELECT * FROM recent ORDER BY unix_timestamp DESC LIMIT 1", cb_sql_recent, (void*) applet, &zErrMsg); if (res != SQLITE_OK) { push_notification(_("Streamer Applet Error"), zErrMsg, NULL, DEFAULT_NOTIFICATION_DURATION); sqlite3_free(zErrMsg); return FALSE; } sqlite3_free(zErrMsg); sqlite3_close(applet->sqlite); // Build menu sprintf(&ui[0], "%s %s %s %s %s", ui1, &applet->ui_recent[0], ui2, &applet->ui_fav[0], ui3); #ifdef HAVE_MATE mate_panel_applet_setup_menu(applet->applet, &ui[0], applet->action_group); #elif HAVE_GNOME_2 BonoboUIVerb bnb1 = BONOBO_UI_UNSAFE_VERB ("All", G_CALLBACK (menu_cb_all)); applet->applet_menu_actions_gnome[applet->bonobo_counter] = bnb1; applet->bonobo_counter++; BonoboUIVerb bnb1a = BONOBO_UI_UNSAFE_VERB ("Settings", G_CALLBACK (menu_cb_settings)); applet->applet_menu_actions_gnome[applet->bonobo_counter] = bnb1a; applet->bonobo_counter++; BonoboUIVerb bnb2 = BONOBO_UI_UNSAFE_VERB ("About", G_CALLBACK (menu_cb_about)); applet->applet_menu_actions_gnome[applet->bonobo_counter] = bnb2; applet->bonobo_counter++; BonoboUIVerb bnb3 = BONOBO_UI_VERB_END; applet->applet_menu_actions_gnome[applet->bonobo_counter] = bnb3; applet->bonobo_counter++; panel_applet_setup_menu(applet->applet, &ui[0], applet->applet_menu_actions_gnome, applet); #endif // Merge menu //GError **error; //char ui[10240]; //sprintf(&ui[0], "<menu action='SubMenu1'>\n<menuitem action='All'/>\n<menuitem action='All'/></menu>"); //guint merge_id = gtk_ui_manager_add_ui_from_string (applet->applet->priv->ui_manager, &ui[0], -1, error); // Settings: Prepare DConf - GNOME2 only #ifdef HAVE_GNOME_2 if (!panel_applet_gconf_get_bool(PANEL_APPLET(applet->applet), "have_settings", NULL)) { panel_applet_gconf_set_bool(PANEL_APPLET(applet->applet), "have_settings", TRUE, NULL); panel_applet_gconf_set_int(PANEL_APPLET(applet->applet), APPLET_KEY_OPTION_1, 0, NULL); panel_applet_gconf_set_int(PANEL_APPLET(applet->applet), APPLET_KEY_OPTION_2, 5, NULL); } #endif // Load settings #ifdef HAVE_MATE applet->gsettings = g_settings_new_with_path(APPLET_GSETTINGS_SCHEMA, APPLET_GSETTINGS_PATH); applet->settings.show_notifications = g_settings_get_int(applet->gsettings, APPLET_KEY_OPTION_1); applet->settings.duration_notifications = g_settings_get_int(applet->gsettings, APPLET_KEY_OPTION_2); #elif HAVE_GNOME_2 applet->settings.show_notifications = panel_applet_gconf_get_int(PANEL_APPLET(applet->applet), APPLET_KEY_OPTION_1, NULL); applet->settings.duration_notifications = panel_applet_gconf_get_int(PANEL_APPLET(applet->applet), APPLET_KEY_OPTION_2, NULL); #endif // Signals g_signal_connect(G_OBJECT(applet->event_box), "button_press_event", G_CALLBACK (on_left_click), (gpointer)applet); g_signal_connect(G_OBJECT(applet->applet), "change_background", G_CALLBACK (applet_back_change), (gpointer)applet); g_signal_connect(G_OBJECT(applet->applet), "destroy", G_CALLBACK(applet_destroy), (gpointer)applet); // Tooltip gtk_widget_set_tooltip_text (GTK_WIDGET (applet->applet), _("No stream selected. Right-click to load one.")); // Show applet gtk_widget_show_all (GTK_WIDGET (applet->applet)); // Run applet->loop = g_main_loop_new (NULL, FALSE); g_main_loop_run (applet->loop); return TRUE; }