cleaned up the interface some

dirtied up the code some
This commit is contained in:
Jonathan Blandford 1998-10-19 19:03:55 +00:00
parent 8b77425757
commit b08f7c854e
10 changed files with 466 additions and 291 deletions

View file

@ -0,0 +1,5 @@
Makefile.in
Makefile
.deps
.libs
theme-selector-capplet

View file

@ -64,13 +64,17 @@ click_entry(GtkWidget *widget, gpointer data);
void void
delete_entry(GtkWidget *widget, gpointer data); delete_entry(GtkWidget *widget, gpointer data);
void void
update_theme_entries(GtkWidget *system_list, GtkWidget *user_list); update_theme_entries(GtkWidget *disp_list);
void void
signal_apply_theme(GtkWidget *widget); signal_apply_theme(GtkWidget *widget);
void void
click_preview(GtkWidget *widget, gpointer data); click_preview(GtkWidget *widget, gpointer data);
void void
click_apply(GtkWidget *widget, gpointer data); click_try(GtkWidget *widget, gpointer data);
void
click_ok(GtkWidget *widget, gpointer data);
void
click_revert(GtkWidget *widget, gpointer data);
void void
edit_file_to_use(gchar *file, gchar *theme); edit_file_to_use(gchar *file, gchar *theme);
void void
@ -88,8 +92,11 @@ extern gchar *readme_current;
extern GtkWidget *icon_display; extern GtkWidget *icon_display;
extern GtkWidget *icon_current; extern GtkWidget *icon_current;
extern GtkWidget *current_theme; extern GtkWidget *current_theme;
extern GtkWidget *current_global_theme;
extern GtkWidget *initial_theme;
extern GtkWidget *last_theme;
extern GtkWidget *system_list; extern GtkWidget *system_list;
extern GtkWidget *user_list;
extern GtkWidget *preview_socket; extern GtkWidget *preview_socket;
extern GtkWidget *auto_preview;
extern gint prog_fd; extern gint prog_fd;
extern gchar gtkrc_tmp[1024]; extern gchar gtkrc_tmp[1024];

View file

@ -64,13 +64,17 @@ click_entry(GtkWidget *widget, gpointer data);
void void
delete_entry(GtkWidget *widget, gpointer data); delete_entry(GtkWidget *widget, gpointer data);
void void
update_theme_entries(GtkWidget *system_list, GtkWidget *user_list); update_theme_entries(GtkWidget *disp_list);
void void
signal_apply_theme(GtkWidget *widget); signal_apply_theme(GtkWidget *widget);
void void
click_preview(GtkWidget *widget, gpointer data); click_preview(GtkWidget *widget, gpointer data);
void void
click_apply(GtkWidget *widget, gpointer data); click_try(GtkWidget *widget, gpointer data);
void
click_ok(GtkWidget *widget, gpointer data);
void
click_revert(GtkWidget *widget, gpointer data);
void void
edit_file_to_use(gchar *file, gchar *theme); edit_file_to_use(gchar *file, gchar *theme);
void void
@ -88,8 +92,11 @@ extern gchar *readme_current;
extern GtkWidget *icon_display; extern GtkWidget *icon_display;
extern GtkWidget *icon_current; extern GtkWidget *icon_current;
extern GtkWidget *current_theme; extern GtkWidget *current_theme;
extern GtkWidget *current_global_theme;
extern GtkWidget *initial_theme;
extern GtkWidget *last_theme;
extern GtkWidget *system_list; extern GtkWidget *system_list;
extern GtkWidget *user_list;
extern GtkWidget *preview_socket; extern GtkWidget *preview_socket;
extern GtkWidget *auto_preview;
extern gint prog_fd; extern gint prog_fd;
extern gchar gtkrc_tmp[1024]; extern gchar gtkrc_tmp[1024];

View file

@ -39,9 +39,14 @@ void demo_main(int argc, char **argv)
{ {
gchar buf[256]; gchar buf[256];
XID window; XID window;
GtkWidget *w[NUM], *hb, *vb[5], *widg, *ww, *www, *l; GtkWidget *widget, *table, *hbox;
int j, i; GSList *group;
gchar *titles[2] = {"One","Two"};
gchar *row1[2] = {"Eenie", "Meenie"};
gchar *row2[2] = {"Mynie", "Moe"};
gchar *row3[2] = {"Catcha", "Tiger"};
gchar *row4[2] = {"By Its", "Toe"};
read(0, buf, 12); read(0, buf, 12);
buf[12] = 0; buf[12] = 0;
sscanf(buf, "%x", &window); sscanf(buf, "%x", &window);
@ -52,58 +57,64 @@ void demo_main(int argc, char **argv)
gtk_rc_parse(gtkrc_tmp); gtk_rc_parse(gtkrc_tmp);
plug = gtk_plug_new(window); plug = gtk_plug_new(window);
gtk_widget_show(plug);
hb = gtk_hbox_new(TRUE, 4); table = gtk_table_new (4, 3, FALSE);
gtk_container_add(GTK_CONTAINER(plug), hb); gtk_container_add(GTK_CONTAINER(plug), table);
gtk_widget_show(hb);
for(i=0; i<5;i++) widget = gtk_label_new ("Selected themes from above will be tested by previewing here.");
{ gtk_label_set_justify (GTK_LABEL (widget), GTK_JUSTIFY_LEFT);
vb[i] = gtk_vbox_new(TRUE, 4);
gtk_box_pack_start(GTK_BOX(hb), vb[i], TRUE, TRUE, 0); /* column one */
gtk_widget_show(vb[i]); gtk_table_attach (GTK_TABLE (table), widget, 0, 3, 0, 1, 0, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
} widget = gtk_button_new_with_label ("Sample Button");
hbox = gtk_hbox_new (FALSE, 0);
j= 0; gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
w[j++] = widg = gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
gtk_button_new_with_label("A Button"); widget = gtk_check_button_new_with_label ("Sample Check Button");
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 0);
w[j++] = widg = gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_check_button_new_with_label("A Check Button"); gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); widget = gtk_entry_new_with_max_length (50);
w[j++] = widg = gtk_entry_set_text (GTK_ENTRY (widget), "Sample Text Entry Field");
gtk_radio_button_new_with_label(NULL, "A Radio Button"); gtk_widget_set_usize (widget, 70, -1);
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 0);
ww = gtk_menu_new(); gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
gtk_widget_show(ww); gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
www = gtk_menu_item_new_with_label("Menu 1");
gtk_widget_show(www); /* column two */
gtk_menu_append(GTK_MENU(ww), www); widget = gtk_radio_button_new_with_label (NULL, "Radio Button 1");
www = gtk_menu_item_new_with_label("Menu 2"); hbox = gtk_hbox_new (FALSE, 0);
gtk_widget_show(www); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_menu_append(GTK_MENU(ww), www); group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
www = gtk_menu_item_new_with_label("Menu 3"); gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, GNOME_PAD_SMALL);
gtk_widget_show(www);
gtk_menu_append(GTK_MENU(ww), www); widget = gtk_radio_button_new_with_label (group, "Radio Button 2");
www = gtk_menu_item_new_with_label("Menu 4"); hbox = gtk_hbox_new (FALSE, 0);
gtk_widget_show(www); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_menu_append(GTK_MENU(ww), www); group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
www = gtk_menu_item_new_with_label("Menu 5"); gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0);
gtk_widget_show(www);
gtk_menu_append(GTK_MENU(ww), www); widget = gtk_radio_button_new_with_label (group, "Radio Button 3");
w[j++] = widg = hbox = gtk_hbox_new (FALSE, 0);
gtk_option_menu_new(); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
gtk_option_menu_set_menu(GTK_OPTION_MENU(widg), ww); gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0);
w[j++] = widg =
gtk_gamma_curve_new(); /* column three */
gtk_box_pack_start(GTK_BOX(vb[1]), widg , TRUE, TRUE, 0); widget = gtk_clist_new_with_titles (2, titles);
// gtk_clist_set_border(GTK_CLIST(widget), GTK_SHADOW_OUT);
for (i=0; i< j; i++) gtk_clist_set_policy(GTK_CLIST(widget), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC);
gtk_widget_show(w[i]); gtk_clist_set_column_width (GTK_CLIST(widget), 0, 45);
gtk_clist_set_column_width (GTK_CLIST(widget), 1, 45);
gtk_clist_append (GTK_CLIST(widget), row1);
gtk_clist_append (GTK_CLIST(widget), row2);
gtk_clist_append (GTK_CLIST(widget), row3);
gtk_clist_append (GTK_CLIST(widget), row4);
gtk_widget_set_usize (widget, 160, -1);
gtk_table_attach (GTK_TABLE (table), widget, 2, 3, 1, 4, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
gdk_input_add_full(0, GDK_INPUT_READ, demo_data_in, NULL, NULL); gdk_input_add_full(0, GDK_INPUT_READ, demo_data_in, NULL, NULL);
gtk_widget_show_all (plug);
gtk_main (); gtk_main ();
} }

View file

@ -39,9 +39,14 @@ void demo_main(int argc, char **argv)
{ {
gchar buf[256]; gchar buf[256];
XID window; XID window;
GtkWidget *w[NUM], *hb, *vb[5], *widg, *ww, *www, *l; GtkWidget *widget, *table, *hbox;
int j, i; GSList *group;
gchar *titles[2] = {"One","Two"};
gchar *row1[2] = {"Eenie", "Meenie"};
gchar *row2[2] = {"Mynie", "Moe"};
gchar *row3[2] = {"Catcha", "Tiger"};
gchar *row4[2] = {"By Its", "Toe"};
read(0, buf, 12); read(0, buf, 12);
buf[12] = 0; buf[12] = 0;
sscanf(buf, "%x", &window); sscanf(buf, "%x", &window);
@ -52,58 +57,64 @@ void demo_main(int argc, char **argv)
gtk_rc_parse(gtkrc_tmp); gtk_rc_parse(gtkrc_tmp);
plug = gtk_plug_new(window); plug = gtk_plug_new(window);
gtk_widget_show(plug);
hb = gtk_hbox_new(TRUE, 4); table = gtk_table_new (4, 3, FALSE);
gtk_container_add(GTK_CONTAINER(plug), hb); gtk_container_add(GTK_CONTAINER(plug), table);
gtk_widget_show(hb);
for(i=0; i<5;i++) widget = gtk_label_new ("Selected themes from above will be tested by previewing here.");
{ gtk_label_set_justify (GTK_LABEL (widget), GTK_JUSTIFY_LEFT);
vb[i] = gtk_vbox_new(TRUE, 4);
gtk_box_pack_start(GTK_BOX(hb), vb[i], TRUE, TRUE, 0); /* column one */
gtk_widget_show(vb[i]); gtk_table_attach (GTK_TABLE (table), widget, 0, 3, 0, 1, 0, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
} widget = gtk_button_new_with_label ("Sample Button");
hbox = gtk_hbox_new (FALSE, 0);
j= 0; gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
w[j++] = widg = gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 1, 2, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
gtk_button_new_with_label("A Button"); widget = gtk_check_button_new_with_label ("Sample Check Button");
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 0);
w[j++] = widg = gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_check_button_new_with_label("A Check Button"); gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); widget = gtk_entry_new_with_max_length (50);
w[j++] = widg = gtk_entry_set_text (GTK_ENTRY (widget), "Sample Text Entry Field");
gtk_radio_button_new_with_label(NULL, "A Radio Button"); gtk_widget_set_usize (widget, 70, -1);
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); hbox = gtk_hbox_new (FALSE, 0);
ww = gtk_menu_new(); gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
gtk_widget_show(ww); gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
www = gtk_menu_item_new_with_label("Menu 1");
gtk_widget_show(www); /* column two */
gtk_menu_append(GTK_MENU(ww), www); widget = gtk_radio_button_new_with_label (NULL, "Radio Button 1");
www = gtk_menu_item_new_with_label("Menu 2"); hbox = gtk_hbox_new (FALSE, 0);
gtk_widget_show(www); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_menu_append(GTK_MENU(ww), www); group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
www = gtk_menu_item_new_with_label("Menu 3"); gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 1, 2, GTK_EXPAND | GTK_FILL, 0, 0, GNOME_PAD_SMALL);
gtk_widget_show(www);
gtk_menu_append(GTK_MENU(ww), www); widget = gtk_radio_button_new_with_label (group, "Radio Button 2");
www = gtk_menu_item_new_with_label("Menu 4"); hbox = gtk_hbox_new (FALSE, 0);
gtk_widget_show(www); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_menu_append(GTK_MENU(ww), www); group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
www = gtk_menu_item_new_with_label("Menu 5"); gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 2, 3, GTK_EXPAND | GTK_FILL, 0, 0, 0);
gtk_widget_show(www);
gtk_menu_append(GTK_MENU(ww), www); widget = gtk_radio_button_new_with_label (group, "Radio Button 3");
w[j++] = widg = hbox = gtk_hbox_new (FALSE, 0);
gtk_option_menu_new(); gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(vb[0]), widg , TRUE, TRUE, 0); group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
gtk_option_menu_set_menu(GTK_OPTION_MENU(widg), ww); gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0);
w[j++] = widg =
gtk_gamma_curve_new(); /* column three */
gtk_box_pack_start(GTK_BOX(vb[1]), widg , TRUE, TRUE, 0); widget = gtk_clist_new_with_titles (2, titles);
// gtk_clist_set_border(GTK_CLIST(widget), GTK_SHADOW_OUT);
for (i=0; i< j; i++) gtk_clist_set_policy(GTK_CLIST(widget), GTK_POLICY_ALWAYS, GTK_POLICY_AUTOMATIC);
gtk_widget_show(w[i]); gtk_clist_set_column_width (GTK_CLIST(widget), 0, 45);
gtk_clist_set_column_width (GTK_CLIST(widget), 1, 45);
gtk_clist_append (GTK_CLIST(widget), row1);
gtk_clist_append (GTK_CLIST(widget), row2);
gtk_clist_append (GTK_CLIST(widget), row3);
gtk_clist_append (GTK_CLIST(widget), row4);
gtk_widget_set_usize (widget, 160, -1);
gtk_table_attach (GTK_TABLE (table), widget, 2, 3, 1, 4, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
gdk_input_add_full(0, GDK_INPUT_READ, demo_data_in, NULL, NULL); gdk_input_add_full(0, GDK_INPUT_READ, demo_data_in, NULL, NULL);
gtk_widget_show_all (plug);
gtk_main (); gtk_main ();
} }

View file

@ -5,8 +5,11 @@ gchar *readme_current;
GtkWidget *icon_display; GtkWidget *icon_display;
GtkWidget *icon_current; GtkWidget *icon_current;
GtkWidget *current_theme; GtkWidget *current_theme;
GtkWidget *current_global_theme = NULL;
GtkWidget *initial_theme = NULL;
GtkWidget *last_theme;
GtkWidget *system_list; GtkWidget *system_list;
GtkWidget *user_list;
GtkWidget *preview_socket; GtkWidget *preview_socket;
gint prog_fd; gint prog_fd;
gchar gtkrc_tmp[1024]; gchar gtkrc_tmp[1024];
GtkWidget *auto_preview;

View file

@ -5,8 +5,11 @@ gchar *readme_current;
GtkWidget *icon_display; GtkWidget *icon_display;
GtkWidget *icon_current; GtkWidget *icon_current;
GtkWidget *current_theme; GtkWidget *current_theme;
GtkWidget *current_global_theme = NULL;
GtkWidget *initial_theme = NULL;
GtkWidget *last_theme;
GtkWidget *system_list; GtkWidget *system_list;
GtkWidget *user_list;
GtkWidget *preview_socket; GtkWidget *preview_socket;
gint prog_fd; gint prog_fd;
gchar gtkrc_tmp[1024]; gchar gtkrc_tmp[1024];
GtkWidget *auto_preview;

View file

@ -4,105 +4,112 @@
static GtkWidget *w; static GtkWidget *w;
extern gint pid; extern gint pid;
void void
die_callback(GtkWidget *widget, gpointer data) die_callback(GtkWidget *widget, gpointer data)
{ {
kill (pid,9); kill (pid,9);
} }
void
auto_callback (GtkWidget *widget, gpointer data)
{
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
}
GtkWidget * GtkWidget *
make_main(void) make_main(void)
{ {
GtkWidget *evbox; GtkWidget *evbox;
GtkWidget *l1, *l2; GtkWidget *l2;
GtkWidget *sw, *label, *socket; GtkWidget *sw, *label, *socket;
GtkWidget *box, *vbox, *hbox; GtkWidget *box, *vbox, *hbox;
GtkWidget *text, *frame, *button; GtkWidget *text, *frame, *button;
GtkWidget *hbxo;
w = capplet_widget_new(); w = capplet_widget_new();
gtk_container_border_width(GTK_CONTAINER(w), 0); gtk_container_border_width(GTK_CONTAINER(w), 5);
l1 = gtk_list_new(); box = gtk_vbox_new(FALSE, GNOME_PAD);
gtk_list_set_selection_mode(GTK_LIST(l1), GTK_SELECTION_SINGLE); hbox = gtk_hbox_new(TRUE, GNOME_PAD);
frame = gtk_frame_new ("Available Themes");
vbox = gtk_hbox_new(FALSE, 0);
gtk_container_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL);
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (frame), vbox);
l2 = gtk_list_new(); l2 = gtk_list_new();
gtk_list_set_selection_mode(GTK_LIST(l2), GTK_SELECTION_SINGLE); gtk_list_set_selection_mode(GTK_LIST(l2), GTK_SELECTION_SINGLE);
hbxo = gtk_vbox_new (FALSE, GNOME_PAD_SMALL);
box = gtk_vbox_new(FALSE, 0); gtk_container_border_width (GTK_CONTAINER (hbxo), GNOME_PAD_SMALL);
label = gtk_label_new ("Auto\nPreview");
hbox = gtk_hbox_new(TRUE, 0); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 0); auto_preview = gtk_check_button_new ();
vbox = gtk_vbox_new(FALSE, 0); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), gnome_config_get_bool ("/theme-switcher-capplet/settings/auto=FALSE"));
gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (auto_preview), "toggled", GTK_SIGNAL_FUNC (auto_callback), NULL);
gtk_container_add (GTK_CONTAINER (auto_preview), label);
label = gtk_label_new("Installed System Themes"); gtk_box_pack_start (GTK_BOX (hbxo), auto_preview, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); button = gtk_button_new_with_label ("Preview");
gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (click_preview), NULL);
gtk_box_pack_start (GTK_BOX (hbxo), button, FALSE, FALSE, 0);
button = gtk_button_new_with_label ("Install");
sw = gtk_scrolled_window_new(NULL, NULL); /* FIXME: this needs ot actually do something. */
gtk_container_add(GTK_CONTAINER(sw), l1); gtk_box_pack_start (GTK_BOX (hbxo), button, FALSE, FALSE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,
GTK_POLICY_ALWAYS);
gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
label = gtk_label_new("Installed User Themes");
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
sw = gtk_scrolled_window_new(NULL, NULL); sw = gtk_scrolled_window_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(sw), l2); gtk_container_add(GTK_CONTAINER(sw), l2);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,
GTK_POLICY_ALWAYS); GTK_POLICY_AUTOMATIC);
gtk_widget_set_usize (sw, 120, -1);
gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbxo, FALSE, FALSE, 0);
sw = gtk_scrolled_window_new(NULL, NULL); frame = gtk_frame_new ("Theme Information");
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS);
gtk_widget_set_usize(sw, -1, 160);
gtk_box_pack_start(GTK_BOX(box), sw, FALSE, FALSE, 0);
evbox = gtk_event_box_new();
gtk_container_add(GTK_CONTAINER(sw), evbox);
socket = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(evbox), socket);
/* gtk_widget_set_usize(socket, 640, 480);*/
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
frame = gtk_frame_new("Theme Information");
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 0);
vbox = gtk_vbox_new(FALSE, 0);
gtk_widget_set_usize(vbox, 128, 128);
gtk_container_add(GTK_CONTAINER(frame), vbox);
icon_display = vbox;
evbox = gtk_viewport_new(NULL, NULL); evbox = gtk_viewport_new(NULL, NULL);
gtk_widget_set_usize(evbox, 256, -1); gtk_container_add (GTK_CONTAINER (frame), evbox);
gtk_box_pack_start(GTK_BOX(hbox), evbox, TRUE, TRUE, 0); gtk_container_border_width (GTK_CONTAINER (evbox), GNOME_PAD_SMALL);
//gtk_widget_set_usize(evbox, 150, -1);
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
text = gtk_xmhtml_new(); text = gtk_xmhtml_new();
gtk_container_add(GTK_CONTAINER(evbox), text); gtk_container_add(GTK_CONTAINER(evbox), text);
/* gtk_box_pack_start(GTK_BOX(hbox), text, TRUE, TRUE, 0);*/
hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL);
update_theme_entries(l1, l2); gtk_container_border_width (GTK_CONTAINER (hbox), GNOME_PAD_SMALL);
frame = gtk_frame_new ("Preview");
gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (frame), hbox);
/* in a gratuituous reuse of variable names... */
sw = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (sw), GTK_SHADOW_IN);
evbox = gtk_event_box_new();
gtk_box_pack_start(GTK_BOX(hbox), sw, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(sw), evbox);
socket = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(evbox), socket);
update_theme_entries(l2);
gtk_signal_connect (GTK_OBJECT (w), "try", gtk_signal_connect (GTK_OBJECT (w), "try",
GTK_SIGNAL_FUNC (click_preview), NULL); GTK_SIGNAL_FUNC (click_try), NULL);
gtk_signal_connect (GTK_OBJECT (w), "ok", gtk_signal_connect (GTK_OBJECT (w), "ok",
GTK_SIGNAL_FUNC (click_apply), NULL); GTK_SIGNAL_FUNC (click_ok), NULL);
gtk_signal_connect (GTK_OBJECT (w), "revert",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (w), "cancel",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_container_add (GTK_CONTAINER (w), box); gtk_container_add (GTK_CONTAINER (w), box);
gtk_signal_connect (GTK_OBJECT (w), "destroy", gtk_signal_connect (GTK_OBJECT (w), "destroy",
(GtkSignalFunc) die_callback, NULL); (GtkSignalFunc) die_callback, NULL);
readme_display = text; readme_display = text;
readme_current = NULL; readme_current = NULL;
icon_current = NULL;
current_theme = NULL; current_theme = NULL;
system_list = l1; last_theme = NULL;
user_list = l2; system_list = l2;
preview_socket = socket; preview_socket = socket;
gtk_widget_realize(socket); gtk_widget_realize(socket);
@ -113,7 +120,7 @@ make_main(void)
void void
click_update(GtkWidget *widget, gpointer data) click_update(GtkWidget *widget, gpointer data)
{ {
update_theme_entries(system_list, user_list); update_theme_entries(system_list);
} }
void void
@ -121,23 +128,28 @@ click_preview(GtkWidget *widget, gpointer data)
{ {
gchar *rc; gchar *rc;
widget = current_theme; if (current_theme == last_theme)
if (!widget)
return; return;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); last_theme = current_theme;
if (!current_theme)
return;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(current_theme), "rc");
test_theme(rc); test_theme(rc);
send_reread(); send_reread();
} }
void void
click_apply(GtkWidget *widget, gpointer data) click_try(GtkWidget *widget, gpointer data)
{ {
gchar *rc; gchar *rc;
gchar *dir, cmd[10240]; gchar *dir, cmd[10240];
if (current_theme == current_global_theme)
return;
widget = current_theme; widget = current_theme;
if (!widget) if (!widget)
return; return;
current_global_theme = current_theme;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc");
dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir"); dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir");
@ -153,20 +165,62 @@ click_apply(GtkWidget *widget, gpointer data)
system(cmd); system(cmd);
gdk_error_warnings = 1; gdk_error_warnings = 1;
} }
void
click_ok(GtkWidget *widget, gpointer data)
{
click_try (widget, data);
gnome_config_set_bool ("/theme-switcher-capplet/settings/auto",GTK_TOGGLE_BUTTON (auto_preview)->active);
gnome_config_set_string ("/theme-switcher-capplet/settings/theme", gtk_object_get_data (GTK_OBJECT (current_theme), "name"));
gnome_config_sync ();
}
void
click_revert(GtkWidget *widget, gpointer data)
{
gchar *rc;
gchar *dir, cmd[10240];
if ((current_global_theme == initial_theme) || (!current_global_theme))
return;
widget = initial_theme;
if (!widget)
return;
current_global_theme = widget;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc");
dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir");
/* hack for enlightenment only!!!! */
/* FIXME: restart what ever windowmanager you have! */
g_snprintf(cmd, sizeof(cmd), "eesh -e \"restart %s/e\"", dir);
printf("%s\n", cmd);
send_reread();
use_theme(rc);
gdk_error_warnings = 0;
signal_apply_theme(widget);
gdk_flush();
system(cmd);
gdk_error_warnings = 1;
gtk_list_select_child (GTK_LIST (system_list), initial_theme);
}
void void
click_entry(GtkWidget *widget, gpointer data) click_entry(GtkWidget *widget, gpointer data)
{ {
gchar *rc, *name, *readme, *icon, *new_readme, buf[1024]; gchar *rc, *name, *readme, *new_readme, buf[1024];
FILE *f; FILE *f;
name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name"); name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name");
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc");
readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme"); readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme");
icon = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "icon");
capplet_widget_state_changed(CAPPLET_WIDGET (w), FALSE); /* boy is this hackish! */
if (widget != initial_theme)
gtk_list_item_deselect (GTK_LIST_ITEM (initial_theme));
if (initial_theme)
capplet_widget_state_changed(CAPPLET_WIDGET (w), TRUE);
else
capplet_widget_state_changed(CAPPLET_WIDGET (w), FALSE);
if (readme_current) if (readme_current)
{ {
@ -195,19 +249,11 @@ click_entry(GtkWidget *widget, gpointer data)
} }
readme_current = new_readme; readme_current = new_readme;
} }
if (icon_current)
gtk_widget_destroy(icon_current);
icon_current = NULL;
if (isfile(icon))
{
icon_current = gnome_pixmap_new_from_file(icon);
if (icon_current)
{
gtk_container_add(GTK_CONTAINER(icon_display), icon_current);
gtk_widget_show(icon_current);
}
}
current_theme = widget; current_theme = widget;
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
} }
void void
@ -227,23 +273,37 @@ delete_entry(GtkWidget *widget, gpointer data)
if (current_theme == widget) if (current_theme == widget)
current_theme = NULL; current_theme = NULL;
} }
static gint sort_alpha(const void *a, const void *b)
{
GtkBin *A, *B;
A = GTK_BIN (a);
B = GTK_BIN (b);
return strcmp((char *)GTK_LABEL (A->child)->label, (char *)GTK_LABEL (B->child)->label);
}
void void
update_theme_entries(GtkWidget *system_list, GtkWidget *user_list) update_theme_entries(GtkWidget *disp_list)
{ {
ThemeEntry *te; ThemeEntry *te;
gint num; gint num;
GList *list; GList *list;
int i; int i;
GtkWidget *item; GtkWidget *item;
gchar *d_theme = gnome_config_get_string ("/theme-switcher-capplet/settings/theme=Default");
list = NULL; list = NULL;
gtk_list_clear_items(GTK_LIST(system_list), 0, -1); gtk_list_clear_items(GTK_LIST(disp_list), 0, -1);
te = list_system_themes(&num); te = list_system_themes(&num);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
item = gtk_list_item_new_with_label(te[i].name); item = gtk_list_item_new_with_label(te[i].name);
gtk_widget_show(item); gtk_widget_show(item);
if (strcmp (d_theme, te[i].name) == 0) {
g_print ("woo hoo -- gotta match %s\n",te[i].name);
initial_theme = item;
}
gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name));
gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc));
gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir));
@ -253,17 +313,18 @@ update_theme_entries(GtkWidget *system_list, GtkWidget *user_list)
GTK_SIGNAL_FUNC(click_entry), NULL); GTK_SIGNAL_FUNC(click_entry), NULL);
gtk_signal_connect(GTK_OBJECT(item), "destroy", gtk_signal_connect(GTK_OBJECT(item), "destroy",
GTK_SIGNAL_FUNC(delete_entry), NULL); GTK_SIGNAL_FUNC(delete_entry), NULL);
list = g_list_append(list, item); list = g_list_insert_sorted(list, item, sort_alpha);
} }
gtk_list_append_items(GTK_LIST(system_list), list);
list = NULL;
gtk_list_clear_items(GTK_LIST(user_list), 0, -1);
te = list_user_themes(&num); te = list_user_themes(&num);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
item = gtk_list_item_new_with_label(te[i].name); item = gtk_list_item_new_with_label(te[i].name);
gtk_widget_show(item); gtk_widget_show(item);
if (strcmp (d_theme, te[i].name) == 0) {
g_print ("woo hoo -- gotta match %s\n",te[i].name);
initial_theme = item;
}
gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name));
gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc));
gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir));
@ -273,9 +334,12 @@ update_theme_entries(GtkWidget *system_list, GtkWidget *user_list)
GTK_SIGNAL_FUNC(click_entry), NULL); GTK_SIGNAL_FUNC(click_entry), NULL);
gtk_signal_connect(GTK_OBJECT(item), "destroy", gtk_signal_connect(GTK_OBJECT(item), "destroy",
GTK_SIGNAL_FUNC(delete_entry), NULL); GTK_SIGNAL_FUNC(delete_entry), NULL);
list = g_list_append(list, item); list = g_list_insert_sorted(list, item, sort_alpha);
} }
gtk_list_append_items(GTK_LIST(user_list), list);
gtk_list_select_child (GTK_LIST (system_list), initial_theme);
gtk_list_append_items(GTK_LIST(disp_list), list);
free_theme_list(te, num); free_theme_list(te, num);
g_free (d_theme);
} }

View file

@ -4,105 +4,112 @@
static GtkWidget *w; static GtkWidget *w;
extern gint pid; extern gint pid;
void void
die_callback(GtkWidget *widget, gpointer data) die_callback(GtkWidget *widget, gpointer data)
{ {
kill (pid,9); kill (pid,9);
} }
void
auto_callback (GtkWidget *widget, gpointer data)
{
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
}
GtkWidget * GtkWidget *
make_main(void) make_main(void)
{ {
GtkWidget *evbox; GtkWidget *evbox;
GtkWidget *l1, *l2; GtkWidget *l2;
GtkWidget *sw, *label, *socket; GtkWidget *sw, *label, *socket;
GtkWidget *box, *vbox, *hbox; GtkWidget *box, *vbox, *hbox;
GtkWidget *text, *frame, *button; GtkWidget *text, *frame, *button;
GtkWidget *hbxo;
w = capplet_widget_new(); w = capplet_widget_new();
gtk_container_border_width(GTK_CONTAINER(w), 0); gtk_container_border_width(GTK_CONTAINER(w), 5);
l1 = gtk_list_new(); box = gtk_vbox_new(FALSE, GNOME_PAD);
gtk_list_set_selection_mode(GTK_LIST(l1), GTK_SELECTION_SINGLE); hbox = gtk_hbox_new(TRUE, GNOME_PAD);
frame = gtk_frame_new ("Available Themes");
vbox = gtk_hbox_new(FALSE, 0);
gtk_container_border_width (GTK_CONTAINER (vbox), GNOME_PAD_SMALL);
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (frame), vbox);
l2 = gtk_list_new(); l2 = gtk_list_new();
gtk_list_set_selection_mode(GTK_LIST(l2), GTK_SELECTION_SINGLE); gtk_list_set_selection_mode(GTK_LIST(l2), GTK_SELECTION_SINGLE);
hbxo = gtk_vbox_new (FALSE, GNOME_PAD_SMALL);
box = gtk_vbox_new(FALSE, 0); gtk_container_border_width (GTK_CONTAINER (hbxo), GNOME_PAD_SMALL);
label = gtk_label_new ("Auto\nPreview");
hbox = gtk_hbox_new(TRUE, 0); gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
gtk_box_pack_start(GTK_BOX(box), hbox, TRUE, TRUE, 0); auto_preview = gtk_check_button_new ();
vbox = gtk_vbox_new(FALSE, 0); gtk_toggle_button_set_state (GTK_TOGGLE_BUTTON (auto_preview), gnome_config_get_bool ("/theme-switcher-capplet/settings/auto=FALSE"));
gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0); gtk_signal_connect (GTK_OBJECT (auto_preview), "toggled", GTK_SIGNAL_FUNC (auto_callback), NULL);
gtk_container_add (GTK_CONTAINER (auto_preview), label);
label = gtk_label_new("Installed System Themes"); gtk_box_pack_start (GTK_BOX (hbxo), auto_preview, FALSE, FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0); button = gtk_button_new_with_label ("Preview");
gtk_signal_connect (GTK_OBJECT (button), "clicked", GTK_SIGNAL_FUNC (click_preview), NULL);
gtk_box_pack_start (GTK_BOX (hbxo), button, FALSE, FALSE, 0);
button = gtk_button_new_with_label ("Install");
sw = gtk_scrolled_window_new(NULL, NULL); /* FIXME: this needs ot actually do something. */
gtk_container_add(GTK_CONTAINER(sw), l1); gtk_box_pack_start (GTK_BOX (hbxo), button, FALSE, FALSE, 0);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,
GTK_POLICY_ALWAYS);
gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
vbox = gtk_vbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(hbox), vbox, TRUE, TRUE, 0);
label = gtk_label_new("Installed User Themes");
gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
sw = gtk_scrolled_window_new(NULL, NULL); sw = gtk_scrolled_window_new(NULL, NULL);
gtk_container_add(GTK_CONTAINER(sw), l2); gtk_container_add(GTK_CONTAINER(sw), l2);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC,
GTK_POLICY_ALWAYS); GTK_POLICY_AUTOMATIC);
gtk_widget_set_usize (sw, 120, -1);
gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0); gtk_box_pack_start(GTK_BOX(vbox), sw, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbxo, FALSE, FALSE, 0);
sw = gtk_scrolled_window_new(NULL, NULL); frame = gtk_frame_new ("Theme Information");
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_ALWAYS,
GTK_POLICY_ALWAYS);
gtk_widget_set_usize(sw, -1, 160);
gtk_box_pack_start(GTK_BOX(box), sw, FALSE, FALSE, 0);
evbox = gtk_event_box_new();
gtk_container_add(GTK_CONTAINER(sw), evbox);
socket = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(evbox), socket);
/* gtk_widget_set_usize(socket, 640, 480);*/
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(box), hbox, FALSE, FALSE, 0);
frame = gtk_frame_new("Theme Information");
gtk_box_pack_start(GTK_BOX(hbox), frame, FALSE, FALSE, 0);
vbox = gtk_vbox_new(FALSE, 0);
gtk_widget_set_usize(vbox, 128, 128);
gtk_container_add(GTK_CONTAINER(frame), vbox);
icon_display = vbox;
evbox = gtk_viewport_new(NULL, NULL); evbox = gtk_viewport_new(NULL, NULL);
gtk_widget_set_usize(evbox, 256, -1); gtk_container_add (GTK_CONTAINER (frame), evbox);
gtk_box_pack_start(GTK_BOX(hbox), evbox, TRUE, TRUE, 0); gtk_container_border_width (GTK_CONTAINER (evbox), GNOME_PAD_SMALL);
//gtk_widget_set_usize(evbox, 150, -1);
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
text = gtk_xmhtml_new(); text = gtk_xmhtml_new();
gtk_container_add(GTK_CONTAINER(evbox), text); gtk_container_add(GTK_CONTAINER(evbox), text);
/* gtk_box_pack_start(GTK_BOX(hbox), text, TRUE, TRUE, 0);*/
hbox = gtk_hbox_new (FALSE, GNOME_PAD_SMALL);
update_theme_entries(l1, l2); gtk_container_border_width (GTK_CONTAINER (hbox), GNOME_PAD_SMALL);
frame = gtk_frame_new ("Preview");
gtk_box_pack_start(GTK_BOX(box), frame, TRUE, TRUE, 0);
gtk_container_add (GTK_CONTAINER (frame), hbox);
/* in a gratuituous reuse of variable names... */
sw = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (sw), GTK_SHADOW_IN);
evbox = gtk_event_box_new();
gtk_box_pack_start(GTK_BOX(hbox), sw, TRUE, TRUE, 0);
gtk_container_add(GTK_CONTAINER(sw), evbox);
socket = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(evbox), socket);
update_theme_entries(l2);
gtk_signal_connect (GTK_OBJECT (w), "try", gtk_signal_connect (GTK_OBJECT (w), "try",
GTK_SIGNAL_FUNC (click_preview), NULL); GTK_SIGNAL_FUNC (click_try), NULL);
gtk_signal_connect (GTK_OBJECT (w), "ok", gtk_signal_connect (GTK_OBJECT (w), "ok",
GTK_SIGNAL_FUNC (click_apply), NULL); GTK_SIGNAL_FUNC (click_ok), NULL);
gtk_signal_connect (GTK_OBJECT (w), "revert",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (w), "cancel",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_container_add (GTK_CONTAINER (w), box); gtk_container_add (GTK_CONTAINER (w), box);
gtk_signal_connect (GTK_OBJECT (w), "destroy", gtk_signal_connect (GTK_OBJECT (w), "destroy",
(GtkSignalFunc) die_callback, NULL); (GtkSignalFunc) die_callback, NULL);
readme_display = text; readme_display = text;
readme_current = NULL; readme_current = NULL;
icon_current = NULL;
current_theme = NULL; current_theme = NULL;
system_list = l1; last_theme = NULL;
user_list = l2; system_list = l2;
preview_socket = socket; preview_socket = socket;
gtk_widget_realize(socket); gtk_widget_realize(socket);
@ -113,7 +120,7 @@ make_main(void)
void void
click_update(GtkWidget *widget, gpointer data) click_update(GtkWidget *widget, gpointer data)
{ {
update_theme_entries(system_list, user_list); update_theme_entries(system_list);
} }
void void
@ -121,23 +128,28 @@ click_preview(GtkWidget *widget, gpointer data)
{ {
gchar *rc; gchar *rc;
widget = current_theme; if (current_theme == last_theme)
if (!widget)
return; return;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); last_theme = current_theme;
if (!current_theme)
return;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(current_theme), "rc");
test_theme(rc); test_theme(rc);
send_reread(); send_reread();
} }
void void
click_apply(GtkWidget *widget, gpointer data) click_try(GtkWidget *widget, gpointer data)
{ {
gchar *rc; gchar *rc;
gchar *dir, cmd[10240]; gchar *dir, cmd[10240];
if (current_theme == current_global_theme)
return;
widget = current_theme; widget = current_theme;
if (!widget) if (!widget)
return; return;
current_global_theme = current_theme;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc");
dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir"); dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir");
@ -153,20 +165,62 @@ click_apply(GtkWidget *widget, gpointer data)
system(cmd); system(cmd);
gdk_error_warnings = 1; gdk_error_warnings = 1;
} }
void
click_ok(GtkWidget *widget, gpointer data)
{
click_try (widget, data);
gnome_config_set_bool ("/theme-switcher-capplet/settings/auto",GTK_TOGGLE_BUTTON (auto_preview)->active);
gnome_config_set_string ("/theme-switcher-capplet/settings/theme", gtk_object_get_data (GTK_OBJECT (current_theme), "name"));
gnome_config_sync ();
}
void
click_revert(GtkWidget *widget, gpointer data)
{
gchar *rc;
gchar *dir, cmd[10240];
if ((current_global_theme == initial_theme) || (!current_global_theme))
return;
widget = initial_theme;
if (!widget)
return;
current_global_theme = widget;
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc");
dir = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "dir");
/* hack for enlightenment only!!!! */
/* FIXME: restart what ever windowmanager you have! */
g_snprintf(cmd, sizeof(cmd), "eesh -e \"restart %s/e\"", dir);
printf("%s\n", cmd);
send_reread();
use_theme(rc);
gdk_error_warnings = 0;
signal_apply_theme(widget);
gdk_flush();
system(cmd);
gdk_error_warnings = 1;
gtk_list_select_child (GTK_LIST (system_list), initial_theme);
}
void void
click_entry(GtkWidget *widget, gpointer data) click_entry(GtkWidget *widget, gpointer data)
{ {
gchar *rc, *name, *readme, *icon, *new_readme, buf[1024]; gchar *rc, *name, *readme, *new_readme, buf[1024];
FILE *f; FILE *f;
name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name"); name = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "name");
rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc"); rc = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "rc");
readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme"); readme = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "readme");
icon = (gchar *)gtk_object_get_data(GTK_OBJECT(widget), "icon");
capplet_widget_state_changed(CAPPLET_WIDGET (w), FALSE); /* boy is this hackish! */
if (widget != initial_theme)
gtk_list_item_deselect (GTK_LIST_ITEM (initial_theme));
if (initial_theme)
capplet_widget_state_changed(CAPPLET_WIDGET (w), TRUE);
else
capplet_widget_state_changed(CAPPLET_WIDGET (w), FALSE);
if (readme_current) if (readme_current)
{ {
@ -195,19 +249,11 @@ click_entry(GtkWidget *widget, gpointer data)
} }
readme_current = new_readme; readme_current = new_readme;
} }
if (icon_current)
gtk_widget_destroy(icon_current);
icon_current = NULL;
if (isfile(icon))
{
icon_current = gnome_pixmap_new_from_file(icon);
if (icon_current)
{
gtk_container_add(GTK_CONTAINER(icon_display), icon_current);
gtk_widget_show(icon_current);
}
}
current_theme = widget; current_theme = widget;
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
} }
void void
@ -227,23 +273,37 @@ delete_entry(GtkWidget *widget, gpointer data)
if (current_theme == widget) if (current_theme == widget)
current_theme = NULL; current_theme = NULL;
} }
static gint sort_alpha(const void *a, const void *b)
{
GtkBin *A, *B;
A = GTK_BIN (a);
B = GTK_BIN (b);
return strcmp((char *)GTK_LABEL (A->child)->label, (char *)GTK_LABEL (B->child)->label);
}
void void
update_theme_entries(GtkWidget *system_list, GtkWidget *user_list) update_theme_entries(GtkWidget *disp_list)
{ {
ThemeEntry *te; ThemeEntry *te;
gint num; gint num;
GList *list; GList *list;
int i; int i;
GtkWidget *item; GtkWidget *item;
gchar *d_theme = gnome_config_get_string ("/theme-switcher-capplet/settings/theme=Default");
list = NULL; list = NULL;
gtk_list_clear_items(GTK_LIST(system_list), 0, -1); gtk_list_clear_items(GTK_LIST(disp_list), 0, -1);
te = list_system_themes(&num); te = list_system_themes(&num);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
item = gtk_list_item_new_with_label(te[i].name); item = gtk_list_item_new_with_label(te[i].name);
gtk_widget_show(item); gtk_widget_show(item);
if (strcmp (d_theme, te[i].name) == 0) {
g_print ("woo hoo -- gotta match %s\n",te[i].name);
initial_theme = item;
}
gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name));
gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc));
gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir));
@ -253,17 +313,18 @@ update_theme_entries(GtkWidget *system_list, GtkWidget *user_list)
GTK_SIGNAL_FUNC(click_entry), NULL); GTK_SIGNAL_FUNC(click_entry), NULL);
gtk_signal_connect(GTK_OBJECT(item), "destroy", gtk_signal_connect(GTK_OBJECT(item), "destroy",
GTK_SIGNAL_FUNC(delete_entry), NULL); GTK_SIGNAL_FUNC(delete_entry), NULL);
list = g_list_append(list, item); list = g_list_insert_sorted(list, item, sort_alpha);
} }
gtk_list_append_items(GTK_LIST(system_list), list);
list = NULL;
gtk_list_clear_items(GTK_LIST(user_list), 0, -1);
te = list_user_themes(&num); te = list_user_themes(&num);
for (i = 0; i < num; i++) for (i = 0; i < num; i++)
{ {
item = gtk_list_item_new_with_label(te[i].name); item = gtk_list_item_new_with_label(te[i].name);
gtk_widget_show(item); gtk_widget_show(item);
if (strcmp (d_theme, te[i].name) == 0) {
g_print ("woo hoo -- gotta match %s\n",te[i].name);
initial_theme = item;
}
gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name)); gtk_object_set_data(GTK_OBJECT(item), "name", g_strdup(te[i].name));
gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc)); gtk_object_set_data(GTK_OBJECT(item), "rc", g_strdup(te[i].rc));
gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir)); gtk_object_set_data(GTK_OBJECT(item), "dir", g_strdup(te[i].dir));
@ -273,9 +334,12 @@ update_theme_entries(GtkWidget *system_list, GtkWidget *user_list)
GTK_SIGNAL_FUNC(click_entry), NULL); GTK_SIGNAL_FUNC(click_entry), NULL);
gtk_signal_connect(GTK_OBJECT(item), "destroy", gtk_signal_connect(GTK_OBJECT(item), "destroy",
GTK_SIGNAL_FUNC(delete_entry), NULL); GTK_SIGNAL_FUNC(delete_entry), NULL);
list = g_list_append(list, item); list = g_list_insert_sorted(list, item, sort_alpha);
} }
gtk_list_append_items(GTK_LIST(user_list), list);
gtk_list_select_child (GTK_LIST (system_list), initial_theme);
gtk_list_append_items(GTK_LIST(disp_list), list);
free_theme_list(te, num); free_theme_list(te, num);
g_free (d_theme);
} }

View file

@ -7,7 +7,7 @@ main(int argc, char **argv)
set_tmp_rc(); set_tmp_rc();
do_demo(argc, argv); do_demo(argc, argv);
gnome_capplet_init ("DeskArt", NULL, argc, argv, 0, NULL); gnome_capplet_init ("theme-switcher-capplet", NULL, argc, argv, 0, NULL);
w = make_main(); w = make_main();
gtk_widget_show_all(w); gtk_widget_show_all(w);