Partial revamp to use bonobo control instead of bug-prone custom socket;

2001-12-08  Richard Hestilow  <hestilow@ximian.com>

	* Partial revamp to use bonobo control instead of bug-prone
	custom socket; also port away from libcapplet.
This commit is contained in:
Richard Hestilow 2001-12-09 03:38:35 +00:00 committed by Rachel Hestilow
parent 5146b73151
commit bf1d38501d
10 changed files with 371 additions and 110 deletions

View file

@ -1,3 +1,8 @@
2001-12-08 Richard Hestilow <hestilow@ximian.com>
* Partial revamp to use bonobo control instead of bug-prone
custom socket; also port away from libcapplet.
2001-10-13 Bradford Hovinen <hovinen@ximian.com>
* lister.c (edit_file_to_use): Be paranoid about what we have read

View file

@ -1,3 +1,5 @@
SUBDIRS = control
cappletname = gtk-theme-selector
cappletgroup = "Advanced/"
bin_PROGRAMS = gtk-theme-selector-capplet
@ -10,7 +12,6 @@ gtk_theme_selector_capplet_SOURCES = \
lister.c \
main.c \
signals.c \
demo.c \
gui.c \
install.c

View file

@ -0,0 +1,23 @@
<oaf_info>
<oaf_server iid="OAFIID:GNOME_Theme_PreviewFactory" type="exe"
location="gnome-theme-preview">
<oaf_attribute name="repo_ids" type="stringv">
<item value="IDL:Bonobo/GenericFactory:1.0"/>
</oaf_attribute>
<oaf_attribute name="name" type="string" value="GNOME Theme Preview Factory"/>
<oaf_attribute name="description" type="string" value="Factory for gnome theme preview controls"/>
</oaf_server>
<oaf_server iid="OAFIID:Bonobo_Sample_Entry" type="factory"
location="OAFIID:Bonobo_Sample_ControlFactory">
<oaf_attribute name="repo_ids" type="stringv">
<item value="IDL:Bonobo/Unknown:1.0"/>
<item value="IDL:Bonobo/Control:1.0"/>
</oaf_attribute>
<oaf_attribute name="name" type="string" value="Gnome Theme Preview"/>
<oaf_attribute name="description" type="string" value="A preview for gtk themes"/>
</oaf_server>
</oaf_info>

View file

@ -0,0 +1,20 @@
bin_PROGRAMS = gnome-theme-preview
INCLUDES = \
-DGNOMELOCALEDIR=\""$(datadir)/locale"\" \
-I$(top_srcdir) \
@CONTROL_CFLAGS@
gnome_theme_preview_SOURCES = \
control.c
gnome_theme_preview_LDADD = \
@CONTROL_LIBS@
serverdir = $(libdir)/bonobo/servers
server_in_files = GNOME_Theme_Preview.server.in
server_DATA = $(server_in_files:.server.in=.server)
@INTLTOOL_SERVER_RULE@
EXTRA_DIST = $(server_in_files) $(server_DATA)

View file

@ -0,0 +1,189 @@
#include <config.h>
#include <libbonoboui.h>
static gchar* current_theme = NULL;
static gchar **new_rc_files = NULL;
static gint new_count = 0;
#define GNOME_PAD_SMALL 4
static GtkWidget*
create_form (void)
{
GtkWidget *widget, *table, *hbox;
GtkWidget *scrolled_window, *menubar, *menu;
GSList *group;
gchar *titles[2] = {N_("One"),N_("Two")};
/* just 8 short names that will serve as samples for titles in demo */
gchar *row1[2] = {N_("Eenie"), N_("Meenie")};
gchar *row2[2] = {N_("Mynie"), N_("Moe")};
gchar *row3[2] = {N_("Catcha"), N_("Tiger")};
gchar *row4[2] = {N_("By Its"), N_("Toe")};
gchar **rc_files;
gint rc_file_count;
gchar *home_dir;
gint i;
for (i=0;i<2;i++) {
titles[i]=_(titles[i]);
row1[i]=_(row1[i]);
row2[i]=_(row2[i]);
row3[i]=_(row3[i]);
row4[i]=_(row4[i]);
}
/* Strip out ~/.gtkrc from the set of initial default files.
* to suppress reading of the previous rc file.
*/
rc_files = gtk_rc_get_default_files();
for (rc_file_count = 0; rc_files[rc_file_count]; rc_file_count++)
/* Nothing */;
new_rc_files = g_new (gchar *, rc_file_count + 2);
home_dir = g_get_home_dir();
new_count = 0;
for (i = 0; i<rc_file_count; i++)
{
if (strncmp (rc_files[i], home_dir, strlen (home_dir)) != 0)
new_rc_files[new_count++] = g_strdup (rc_files[i]);
}
new_rc_files[new_count++] = NULL;
new_rc_files[new_count] = NULL;
gtk_rc_set_default_files (new_rc_files);
table = gtk_table_new (5, 3, FALSE);
widget = gtk_label_new (_("Selected themes from above will be tested by previewing here."));
gtk_label_set_justify (GTK_LABEL (widget), GTK_JUSTIFY_LEFT);
gtk_table_attach (GTK_TABLE (table), widget, 0, 3, 0, 1, 0, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
/* column one */
widget = gtk_button_new_with_label (_("Sample Button"));
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 2, 3, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
widget = gtk_check_button_new_with_label (_("Sample Check Button"));
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 3, 4, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
widget = gtk_entry_new_with_max_length (50);
gtk_entry_set_text (GTK_ENTRY (widget), _("Sample Text Entry Field"));
gtk_widget_set_usize (widget, 70, -1);
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), widget, TRUE, TRUE, 0);
gtk_table_attach (GTK_TABLE (table), hbox, 0, 1, 4, 5, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
/* column two */
menubar = gtk_menu_bar_new();
gtk_table_attach (GTK_TABLE (table), menubar, 1, 2, 2, 3, 0, 0, GNOME_PAD_SMALL, GNOME_PAD_SMALL);
widget = gtk_menu_item_new_with_label(_("Submenu"));
gtk_menu_bar_append(GTK_MENU_BAR(menubar), widget);
menu = gtk_menu_new();
gtk_menu_item_set_submenu(GTK_MENU_ITEM(widget), menu);
widget = gtk_menu_item_new_with_label(_("Item 1"));
gtk_menu_append(GTK_MENU(menu), widget);
widget = gtk_menu_item_new_with_label(_("Another item"));
gtk_menu_append(GTK_MENU(menu), widget);
widget = gtk_radio_button_new_with_label (NULL, _("Radio Button 1"));
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 3, 4, GTK_EXPAND | GTK_FILL, 0, 0, 0);
widget = gtk_radio_button_new_with_label (group, _("Radio Button 2"));
hbox = gtk_hbox_new (FALSE, 0);
gtk_box_pack_start (GTK_BOX (hbox), widget, FALSE, FALSE, 0);
group = gtk_radio_button_group (GTK_RADIO_BUTTON (widget));
gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 4, 5, GTK_EXPAND | GTK_FILL, 0, 0, 0);
/* column three */
scrolled_window = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled_window),
GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
gtk_table_attach (GTK_TABLE (table), scrolled_window, 2, 3, 2, 5, GTK_EXPAND | GTK_FILL, 0, GNOME_PAD_SMALL, 0);
widget = gtk_clist_new_with_titles (2, titles);
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_container_add (GTK_CONTAINER (scrolled_window), widget);
return table;
}
static void
get_prop_cb (BonoboPropertyBag *bag, BonoboArg *arg, guint arg_id,
CORBA_Environment *ev, gpointer data)
{
BONOBO_ARG_SET_STRING (arg, current_theme);
}
static void
set_prop_cb (BonoboPropertyBag *bag, const BonoboArg *arg, guint arg_id,
CORBA_Environment *ev, GtkWidget *form)
{
if (current_theme)
g_free (current_theme);
current_theme = g_strdup (BONOBO_ARG_GET_STRING (arg));
g_print ("Set to: %s\n", current_theme);
g_free (new_rc_files[new_count - 1]);
new_rc_files[new_count - 1] = g_strdup (current_theme);
gtk_rc_set_default_files (new_rc_files);
gtk_rc_reparse_all_for_settings (gtk_settings_get_default (), TRUE);
gtk_widget_reset_rc_styles (form);
}
BonoboObject *
gnome_theme_preview_new (void)
{
BonoboPropertyBag *pb;
BonoboControl *control;
GtkWidget *form;
form = create_form ();
gtk_widget_show_all (form);
control = bonobo_control_new (form);
pb = bonobo_property_bag_new (get_prop_cb, set_prop_cb, form);
bonobo_property_bag_add (pb, "theme", 0, BONOBO_ARG_STRING, NULL,
"The currently previewed theme",
BONOBO_PROPERTY_READABLE |
BONOBO_PROPERTY_WRITEABLE);
bonobo_control_set_properties (control, BONOBO_OBJREF (pb), NULL);
bonobo_object_unref (BONOBO_OBJECT (pb));
return BONOBO_OBJECT (control);
}
static BonoboObject *
control_factory (BonoboGenericFactory *factory, const char *id, gpointer data)
{
BonoboObject *object = NULL;
g_return_val_if_fail (id != NULL, NULL);
if (!strcmp (id, "OAFIID:GNOME_Theme_Preview"))
object = gnome_theme_preview_new ();
return object;
}
BONOBO_ACTIVATION_FACTORY ("OAFIID:GNOME_Theme_PreviewFactory",
"gnome-theme-preview", VERSION,
control_factory, NULL);

View file

@ -7,6 +7,7 @@
#include <unistd.h>
#include <limits.h>
#include <fcntl.h>
#include <bonobo.h>
typedef struct _theme_entry
{
@ -61,8 +62,6 @@ make_main(void);
void
update_theme_entries(GtkWidget *disp_list);
void
signal_apply_theme(GtkWidget *widget);
void
edit_file_to_use(gchar *file, gchar *theme, gchar *font);
void
set_tmp_rc(void);
@ -72,14 +71,6 @@ void
test_theme(gchar *theme, gchar *font);
gchar *
install_theme(gchar *file);
gint
do_demo(int argc, char **argv);
void
send_socket(void);
void
send_reread(void);
extern GtkWidget *preview_socket;
extern gint prog_fd;
extern GtkWidget *preview_control;
extern gchar gtkrc_tmp[1024];

View file

@ -7,6 +7,7 @@
#include <unistd.h>
#include <limits.h>
#include <fcntl.h>
#include <bonobo.h>
typedef struct _theme_entry
{
@ -61,8 +62,6 @@ make_main(void);
void
update_theme_entries(GtkWidget *disp_list);
void
signal_apply_theme(GtkWidget *widget);
void
edit_file_to_use(gchar *file, gchar *theme, gchar *font);
void
set_tmp_rc(void);
@ -72,14 +71,6 @@ void
test_theme(gchar *theme, gchar *font);
gchar *
install_theme(gchar *file);
gint
do_demo(int argc, char **argv);
void
send_socket(void);
void
send_reread(void);
extern GtkWidget *preview_socket;
extern gint prog_fd;
extern GtkWidget *preview_control;
extern gchar gtkrc_tmp[1024];

View file

@ -4,9 +4,10 @@
#endif
#include "da.h"
#include "capplet-widget.h"
#include <signal.h>
GtkWidget *preview_control;
static gboolean ignore_change = FALSE;
static GtkWidget *install_theme_file_sel;
@ -38,6 +39,21 @@ click_revert(GtkWidget *widget, gpointer data);
static void
click_entry(GtkWidget *clist, gint row, gint col, GdkEvent *event,
gpointer data);
static void
state_changed (gboolean state);
static void
response_cb (GtkDialog *dialog, GtkResponseType response, gpointer data);
void
send_reread(void)
{
if (!(current_theme && current_theme->rc))
return;
bonobo_widget_set_property (BONOBO_WIDGET (preview_control),
"theme", TC_CORBA_string,
gtkrc_tmp, NULL);
}
static void
auto_callback (GtkWidget *widget, gpointer data)
@ -45,7 +61,7 @@ auto_callback (GtkWidget *widget, gpointer data)
if (ignore_change == FALSE) {
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
}
}
@ -53,7 +69,7 @@ static void
font_callback (GtkWidget *widget, gchar *font, gpointer data)
{
if (ignore_change == FALSE) {
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
}
@ -62,7 +78,7 @@ static void
use_theme_font_callback (GtkWidget *widget, gpointer data)
{
if (ignore_change == FALSE) {
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
if (!GTK_TOGGLE_BUTTON (font_cbox)->active)
@ -170,16 +186,6 @@ install_theme_callback (GtkWidget *widget, gpointer data)
}
static gint
delete_capplet (GtkWidget *widget, GdkEvent *event, gpointer data)
{
/* We don't want the toplevel window destroyed until
* our child exits.
*/
close(prog_fd);
return FALSE;
}
GtkWidget *
make_main(void)
{
@ -188,9 +194,16 @@ make_main(void)
GtkWidget *frame, *button;
GtkWidget *button_vbox;
gboolean default_used;
BonoboUIContainer *container;
capplet_widget = capplet_widget_new();
gtk_container_set_border_width(GTK_CONTAINER(capplet_widget), 5);
capplet_widget = gtk_dialog_new_with_buttons (_("Gtk+ Theme Selector"),
NULL, -1,
GTK_STOCK_HELP, GTK_RESPONSE_HELP,
GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
NULL);
gtk_dialog_set_response_sensitive (GTK_DIALOG (capplet_widget),
GTK_RESPONSE_APPLY, FALSE);
box = gtk_vbox_new(FALSE, GNOME_PAD);
hbox = gtk_hbox_new(TRUE, GNOME_PAD);
@ -310,23 +323,17 @@ make_main(void)
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
preview_socket = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(frame), preview_socket);
container = bonobo_ui_container_new ();
preview_control = bonobo_widget_new_control ("OAFIID:GNOME_Theme_Preview",
BONOBO_OBJREF (container));
bonobo_object_unref (BONOBO_OBJECT (container));
gtk_container_add(GTK_CONTAINER(frame), preview_control);
update_theme_entries(theme_list);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "help",
GTK_SIGNAL_FUNC (click_help), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "try",
GTK_SIGNAL_FUNC (click_try), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "ok",
GTK_SIGNAL_FUNC (click_ok), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "revert",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "cancel",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "delete_event",
GTK_SIGNAL_FUNC (delete_capplet), NULL);
gtk_container_add (GTK_CONTAINER (capplet_widget), box);
g_signal_connect (G_OBJECT (capplet_widget), "response", response_cb, NULL);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (capplet_widget)->vbox), box,
TRUE, TRUE, 0);
last_theme = NULL;
@ -390,7 +397,7 @@ click_try(GtkWidget *widget, gpointer data)
use_theme(rc, NULL);
}
gdk_error_trap_push ();
signal_apply_theme(widget);
signal_apply_theme(capplet_widget);
gdk_flush();
/* system(cmd); */
gdk_error_trap_pop ();
@ -489,9 +496,9 @@ click_entry(GtkWidget *clist, gint row, gint col, GdkEvent *event,
current_theme = gtk_clist_get_row_data (GTK_CLIST (clist), row);
if (initial_theme)
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
else
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), FALSE);
state_changed (FALSE);
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (NULL,NULL);
@ -614,3 +621,24 @@ update_theme_entries(GtkWidget *disp_list)
if (current_theme == NULL)
;
}
static void
response_cb (GtkDialog *dialog, GtkResponseType response, gpointer data)
{
switch (response)
{
case GTK_RESPONSE_NONE:
case GTK_RESPONSE_CLOSE:
gtk_main_quit ();
break;
case GTK_RESPONSE_APPLY:
click_ok (NULL, NULL);
break;
}
}
static void state_changed (gboolean state)
{
gtk_dialog_set_response_sensitive (GTK_DIALOG (capplet_widget),
GTK_RESPONSE_APPLY, state);
}

View file

@ -4,9 +4,10 @@
#endif
#include "da.h"
#include "capplet-widget.h"
#include <signal.h>
GtkWidget *preview_control;
static gboolean ignore_change = FALSE;
static GtkWidget *install_theme_file_sel;
@ -38,6 +39,21 @@ click_revert(GtkWidget *widget, gpointer data);
static void
click_entry(GtkWidget *clist, gint row, gint col, GdkEvent *event,
gpointer data);
static void
state_changed (gboolean state);
static void
response_cb (GtkDialog *dialog, GtkResponseType response, gpointer data);
void
send_reread(void)
{
if (!(current_theme && current_theme->rc))
return;
bonobo_widget_set_property (BONOBO_WIDGET (preview_control),
"theme", TC_CORBA_string,
gtkrc_tmp, NULL);
}
static void
auto_callback (GtkWidget *widget, gpointer data)
@ -45,7 +61,7 @@ auto_callback (GtkWidget *widget, gpointer data)
if (ignore_change == FALSE) {
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
}
}
@ -53,7 +69,7 @@ static void
font_callback (GtkWidget *widget, gchar *font, gpointer data)
{
if (ignore_change == FALSE) {
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
}
@ -62,7 +78,7 @@ static void
use_theme_font_callback (GtkWidget *widget, gpointer data)
{
if (ignore_change == FALSE) {
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (widget,NULL);
if (!GTK_TOGGLE_BUTTON (font_cbox)->active)
@ -170,16 +186,6 @@ install_theme_callback (GtkWidget *widget, gpointer data)
}
static gint
delete_capplet (GtkWidget *widget, GdkEvent *event, gpointer data)
{
/* We don't want the toplevel window destroyed until
* our child exits.
*/
close(prog_fd);
return FALSE;
}
GtkWidget *
make_main(void)
{
@ -188,9 +194,16 @@ make_main(void)
GtkWidget *frame, *button;
GtkWidget *button_vbox;
gboolean default_used;
BonoboUIContainer *container;
capplet_widget = capplet_widget_new();
gtk_container_set_border_width(GTK_CONTAINER(capplet_widget), 5);
capplet_widget = gtk_dialog_new_with_buttons (_("Gtk+ Theme Selector"),
NULL, -1,
GTK_STOCK_HELP, GTK_RESPONSE_HELP,
GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
NULL);
gtk_dialog_set_response_sensitive (GTK_DIALOG (capplet_widget),
GTK_RESPONSE_APPLY, FALSE);
box = gtk_vbox_new(FALSE, GNOME_PAD);
hbox = gtk_hbox_new(TRUE, GNOME_PAD);
@ -310,23 +323,17 @@ make_main(void)
frame = gtk_frame_new (NULL);
gtk_frame_set_shadow_type (GTK_FRAME (frame), GTK_SHADOW_IN);
gtk_box_pack_start(GTK_BOX(hbox), frame, TRUE, TRUE, 0);
preview_socket = gtk_socket_new();
gtk_container_add(GTK_CONTAINER(frame), preview_socket);
container = bonobo_ui_container_new ();
preview_control = bonobo_widget_new_control ("OAFIID:GNOME_Theme_Preview",
BONOBO_OBJREF (container));
bonobo_object_unref (BONOBO_OBJECT (container));
gtk_container_add(GTK_CONTAINER(frame), preview_control);
update_theme_entries(theme_list);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "help",
GTK_SIGNAL_FUNC (click_help), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "try",
GTK_SIGNAL_FUNC (click_try), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "ok",
GTK_SIGNAL_FUNC (click_ok), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "revert",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "cancel",
GTK_SIGNAL_FUNC (click_revert), NULL);
gtk_signal_connect (GTK_OBJECT (capplet_widget), "delete_event",
GTK_SIGNAL_FUNC (delete_capplet), NULL);
gtk_container_add (GTK_CONTAINER (capplet_widget), box);
g_signal_connect (G_OBJECT (capplet_widget), "response", response_cb, NULL);
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (capplet_widget)->vbox), box,
TRUE, TRUE, 0);
last_theme = NULL;
@ -390,7 +397,7 @@ click_try(GtkWidget *widget, gpointer data)
use_theme(rc, NULL);
}
gdk_error_trap_push ();
signal_apply_theme(widget);
signal_apply_theme(capplet_widget);
gdk_flush();
/* system(cmd); */
gdk_error_trap_pop ();
@ -489,9 +496,9 @@ click_entry(GtkWidget *clist, gint row, gint col, GdkEvent *event,
current_theme = gtk_clist_get_row_data (GTK_CLIST (clist), row);
if (initial_theme)
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), TRUE);
state_changed (TRUE);
else
capplet_widget_state_changed(CAPPLET_WIDGET (capplet_widget), FALSE);
state_changed (FALSE);
if (GTK_TOGGLE_BUTTON (auto_preview)->active)
click_preview (NULL,NULL);
@ -614,3 +621,24 @@ update_theme_entries(GtkWidget *disp_list)
if (current_theme == NULL)
;
}
static void
response_cb (GtkDialog *dialog, GtkResponseType response, gpointer data)
{
switch (response)
{
case GTK_RESPONSE_NONE:
case GTK_RESPONSE_CLOSE:
gtk_main_quit ();
break;
case GTK_RESPONSE_APPLY:
click_ok (NULL, NULL);
break;
}
}
static void state_changed (gboolean state)
{
gtk_dialog_set_response_sensitive (GTK_DIALOG (capplet_widget),
GTK_RESPONSE_APPLY, state);
}

View file

@ -3,7 +3,6 @@
# include <config.h>
#endif
#include "capplet-widget.h"
#include "da.h"
#define THEME_SWITCHER_VERSION "0.1"
@ -12,33 +11,19 @@ int
main(int argc, char **argv)
{
GtkWidget *w;
gint child_pid;
bindtextdomain (PACKAGE, GNOMELOCALEDIR);
textdomain (PACKAGE);
set_tmp_rc();
child_pid = do_demo(argc, argv);
switch (gnome_capplet_init ("gtk-theme-selector",
THEME_SWITCHER_VERSION, argc, argv, NULL, 0, NULL)) {
case -1:
exit (1);
case 1:
return 0;
}
gnome_program_init ("gtk-theme-selector", THEME_SWITCHER_VERSION,
LIBGNOMEUI_MODULE, argc, argv, NULL);
w = make_main();
gtk_widget_show_all(w);
send_socket();
gtk_main();
/* This doesn't work any more -- why? */
#if 0
/* Pause here until our child exits and the socket can be safely
* destroyed
*/
if (child_pid > 0)
waitpid(child_pid, NULL, 0);
#endif
return 0;
}