Port to GConf, away from libcapplet.

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

	* Port to GConf, away from libcapplet.
This commit is contained in:
Richard Hestilow 2001-12-09 03:26:21 +00:00 committed by Rachel Hestilow
parent 381e53db7a
commit 5146b73151
3 changed files with 85 additions and 50 deletions

View file

@ -1,3 +1,7 @@
2001-12-08 Richard Hestilow <hestilow@ximian.com>
* Port to GConf, away from libcapplet.
2001-09-29 Richard Hestilow <hestilow@ximian.com> 2001-09-29 Richard Hestilow <hestilow@ximian.com>
* wm-properties-capplet.c: Applied patch from drk@sgi.com * wm-properties-capplet.c: Applied patch from drk@sgi.com

View file

@ -10,8 +10,11 @@
#include <unistd.h> #include <unistd.h>
#include <ctype.h> #include <ctype.h>
#include <libgnome/libgnome.h> #include <libgnome/libgnome.h>
#include <gconf/gconf-client.h>
#include "wm-properties.h" #include "wm-properties.h"
#define CONFIG_PREFIX "/desktop/gnome/applications/window_manager"
/* Current list of window managers */ /* Current list of window managers */
GList *window_managers = NULL; GList *window_managers = NULL;
@ -187,6 +190,7 @@ wm_list_read_dir (gchar *directory, gboolean is_user)
wm = g_new (WindowManager, 1); wm = g_new (WindowManager, 1);
wm->dentry = gnome_desktop_item_new_from_file (tmp_list->data, GNOME_DESKTOP_ITEM_TYPE_APPLICATION, NULL); wm->dentry = gnome_desktop_item_new_from_file (tmp_list->data, GNOME_DESKTOP_ITEM_TYPE_APPLICATION, NULL);
gnome_desktop_item_set_entry_type (wm->dentry, GNOME_DESKTOP_ITEM_TYPE_APPLICATION);
if (!wm->dentry) { if (!wm->dentry) {
g_free (wm); g_free (wm);
@ -242,7 +246,8 @@ wm_list_init (void)
{ {
gchar *tempdir; gchar *tempdir;
gchar *name; gchar *name;
GConfClient *client;
tempdir = gnome_unconditional_datadir_file ("gnome/wm-properties/"); tempdir = gnome_unconditional_datadir_file ("gnome/wm-properties/");
wm_list_read_dir (tempdir, FALSE); wm_list_read_dir (tempdir, FALSE);
g_free (tempdir); g_free (tempdir);
@ -251,14 +256,15 @@ wm_list_init (void)
wm_list_read_dir (tempdir, TRUE); wm_list_read_dir (tempdir, TRUE);
g_free (tempdir); g_free (tempdir);
name = gnome_config_get_string ("wm-properties/Config/Config/Current"); client = gconf_client_get_default ();
name = gconf_client_get_string (client, CONFIG_PREFIX "/current", NULL);
if (name) { if (name) {
current_wm = wm_list_find (window_managers, name); current_wm = wm_list_find (window_managers, name);
g_free (name); g_free (name);
} }
if (!current_wm) { if (!current_wm) {
name = gnome_config_get_string ("default.wm/Default/WM"); name = gconf_client_get_string (client, CONFIG_PREFIX "/default", NULL);
if (name) { if (name) {
current_wm = wm_list_find_exec (window_managers, name); current_wm = wm_list_find_exec (window_managers, name);
@ -287,6 +293,8 @@ wm_list_init (void)
if(current_wm) if(current_wm)
current_wm_save = wm_list_find (window_managers_save, gnome_desktop_item_get_string (current_wm->dentry, GNOME_DESKTOP_ITEM_NAME)); current_wm_save = wm_list_find (window_managers_save, gnome_desktop_item_get_string (current_wm->dentry, GNOME_DESKTOP_ITEM_NAME));
g_object_unref (G_OBJECT (client));
} }
void void
@ -345,8 +353,14 @@ wm_list_save (void)
/* Save the current window manager /* Save the current window manager
*/ */
if(current_wm) if(current_wm)
gnome_config_set_string ("wm-properties/Config/Config/Current", {
gnome_desktop_item_get_string (current_wm->dentry, GNOME_DESKTOP_ITEM_NAME)); GConfClient *client = gconf_client_get_default ();
gconf_client_set_string (client, CONFIG_PREFIX "/current",
gnome_desktop_item_get_string (current_wm->dentry, GNOME_DESKTOP_ITEM_EXEC),
NULL);
g_object_unref (G_OBJECT (client));
}
gnome_config_sync (); gnome_config_sync ();
} }
@ -434,6 +448,7 @@ wm_read_from_xml (xmlNodePtr wm_node)
wm->dentry = gnome_desktop_item_new_from_file wm->dentry = gnome_desktop_item_new_from_file
(xmlGetProp (wm_node, "desktop-entry"), (xmlGetProp (wm_node, "desktop-entry"),
GNOME_DESKTOP_ITEM_TYPE_APPLICATION, NULL); GNOME_DESKTOP_ITEM_TYPE_APPLICATION, NULL);
gnome_desktop_item_set_entry_type (wm->dentry, GNOME_DESKTOP_ITEM_TYPE_APPLICATION);
for (node = wm_node->children; node; node = node->next) { for (node = wm_node->children; node; node = node->next) {
if (!strcmp (node->name, "config-exec")) if (!strcmp (node->name, "config-exec"))

View file

@ -12,7 +12,6 @@
#include <ctype.h> #include <ctype.h>
#include <libxml/parser.h> #include <libxml/parser.h>
#include "wm-properties.h" #include "wm-properties.h"
#include "capplet-widget.h"
#include "gnome.h" #include "gnome.h"
#ifdef HAVE_XIMIAN_ARCHIVER #ifdef HAVE_XIMIAN_ARCHIVER
@ -130,6 +129,13 @@ gboolean restart_pending = FALSE;
*/ */
gboolean in_fill = FALSE; gboolean in_fill = FALSE;
static gint cap_session_init = 0;
static struct poptOption cap_options[] = {
{"init-session-settings", '\0', POPT_ARG_NONE, &cap_session_init, 0,
N_("Initialize session settings"), NULL},
{NULL, '\0', 0, NULL, 0}
};
#ifdef HAVE_XIMIAN_ARCHIVER #ifdef HAVE_XIMIAN_ARCHIVER
static void static void
@ -150,6 +156,34 @@ store_archive_data (void)
#endif /* HAVE_XIMIAN_ARCHIVER */ #endif /* HAVE_XIMIAN_ARCHIVER */
static void
response_cb (GtkDialog *dialog, gint response_id, gpointer data)
{
int old_state = state;
switch (response_id)
{
case GTK_RESPONSE_NONE:
case GTK_RESPONSE_CLOSE:
gtk_main_quit ();
break;
case GTK_RESPONSE_APPLY:
state = STATE_TRY;
restart(FALSE);
wm_list_set_current (selected_wm);
wm_list_save ();
update_session ();
break;
}
}
static void
state_changed (void)
{
gtk_dialog_set_response_sensitive (GTK_DIALOG (capplet), GTK_RESPONSE_APPLY,
TRUE);
}
static GtkWidget * static GtkWidget *
left_aligned_button (gchar *label) left_aligned_button (gchar *label)
{ {
@ -615,6 +649,7 @@ restart (gboolean force)
GnomeDesktopItem *twm_dentry = gnome_desktop_item_new (); GnomeDesktopItem *twm_dentry = gnome_desktop_item_new ();
WindowManager twm_fallback = {twm_dentry, "twm", "twm", 0, 0, 1, 0}; WindowManager twm_fallback = {twm_dentry, "twm", "twm", 0, 0, 1, 0};
gnome_desktop_item_set_entry_type (twm_dentry, GNOME_DESKTOP_ITEM_TYPE_APPLICATION);
gnome_desktop_item_set_string (twm_dentry, gnome_desktop_item_set_string (twm_dentry,
GNOME_DESKTOP_ITEM_NAME, "twm"); GNOME_DESKTOP_ITEM_NAME, "twm");
gnome_desktop_item_set_string (twm_dentry, gnome_desktop_item_set_string (twm_dentry,
@ -964,7 +999,7 @@ edit_dialog (void)
if (selected_wm->is_user && (result == 0)) { if (selected_wm->is_user && (result == 0)) {
get_dialog_contents (dialog, selected_wm); get_dialog_contents (dialog, selected_wm);
update_gui(); update_gui();
capplet_widget_state_changed (CAPPLET_WIDGET (capplet), TRUE); state_changed ();
} }
gtk_widget_destroy (dialog->dialog); gtk_widget_destroy (dialog->dialog);
@ -985,6 +1020,7 @@ add_dialog (void)
if (result == 0) { if (result == 0) {
wm = g_new0 (WindowManager, 1); wm = g_new0 (WindowManager, 1);
wm->dentry = gnome_desktop_item_new (); wm->dentry = gnome_desktop_item_new ();
gnome_desktop_item_set_entry_type (wm->dentry, GNOME_DESKTOP_ITEM_TYPE_APPLICATION);
get_dialog_contents (dialog, wm); get_dialog_contents (dialog, wm);
wm->is_user = TRUE; wm->is_user = TRUE;
@ -993,8 +1029,8 @@ add_dialog (void)
selected_wm = wm; selected_wm = wm;
update_gui(); update_gui();
capplet_widget_state_changed (CAPPLET_WIDGET (capplet), TRUE); state_changed ();
} }
gtk_widget_destroy (dialog->dialog); gtk_widget_destroy (dialog->dialog);
@ -1017,7 +1053,7 @@ select_row (GtkCList *the_clist,
if (wm != selected_wm) { if (wm != selected_wm) {
selected_wm = wm; selected_wm = wm;
capplet_widget_state_changed (CAPPLET_WIDGET (capplet), TRUE); state_changed ();
} }
} }
} }
@ -1040,7 +1076,7 @@ delete (void)
wm_list_delete (selected_wm); wm_list_delete (selected_wm);
selected_wm = current_wm; selected_wm = current_wm;
update_gui(); update_gui();
capplet_widget_state_changed (CAPPLET_WIDGET (capplet), TRUE); state_changed ();
} }
@ -1072,7 +1108,14 @@ wm_setup (void)
GtkWidget *scrolled_window; GtkWidget *scrolled_window;
GtkWidget *label; GtkWidget *label;
capplet = capplet_widget_new (); capplet = gtk_dialog_new_with_buttons (_("Window Manager 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), GTK_RESPONSE_APPLY, FALSE);
gtk_widget_set_usize (capplet, 360, 200); gtk_widget_set_usize (capplet, 360, 200);
vbox = gtk_vbox_new (FALSE, 0); vbox = gtk_vbox_new (FALSE, 0);
@ -1130,7 +1173,8 @@ wm_setup (void)
gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0); gtk_box_pack_start (GTK_BOX (vbox), hbox, TRUE, TRUE, 0);
gtk_box_pack_end (GTK_BOX (vbox), bottom, FALSE, FALSE, 0); gtk_box_pack_end (GTK_BOX (vbox), bottom, FALSE, FALSE, 0);
gtk_container_add (GTK_CONTAINER (capplet), vbox); gtk_box_pack_start (GTK_BOX (GTK_DIALOG (capplet)->vbox), vbox,
TRUE, TRUE, 0);
gtk_widget_show_all (capplet); gtk_widget_show_all (capplet);
@ -1169,21 +1213,14 @@ static void do_set_xml (void)
int int
main (int argc, char **argv) main (int argc, char **argv)
{ {
gint init_results;
bindtextdomain (PACKAGE, GNOMELOCALEDIR); bindtextdomain (PACKAGE, GNOMELOCALEDIR);
textdomain (PACKAGE); textdomain (PACKAGE);
argv0 = g_strdup (argv[0]); argv0 = g_strdup (argv[0]);
init_results = gnome_capplet_init("wm-properties", VERSION, gnome_program_init ("wm-properties", VERSION,
argc, argv, NULL, 0, NULL); LIBGNOMEUI_MODULE, argc, argv,
GNOME_PARAM_POPT_TABLE, &cap_options,
if (init_results < 0) { NULL);
g_warning (_("an initialization error occurred while "
"starting 'wm-properties-capplet'.\n"
"aborting...\n"));
exit (1);
}
/* Read in the list of window managers, and the current /* Read in the list of window managers, and the current
* window manager * window manager
@ -1191,41 +1228,20 @@ main (int argc, char **argv)
wm_list_init(); wm_list_init();
selected_wm = wm_list_get_current(); selected_wm = wm_list_get_current();
if (init_results == 0) { if (!cap_session_init)
{
init_session(); init_session();
wm_setup(); wm_setup();
gtk_signal_connect(GTK_OBJECT(capplet), "destroy", g_signal_connect (G_OBJECT (capplet), "response",
GTK_SIGNAL_FUNC(destroy_callback), NULL); response_cb, NULL);
gtk_signal_connect (GTK_OBJECT (capplet), "help",
GTK_SIGNAL_FUNC (help_callback), NULL);
gtk_signal_connect (GTK_OBJECT (capplet), "try",
GTK_SIGNAL_FUNC (try_callback), NULL);
gtk_signal_connect (GTK_OBJECT (capplet), "revert",
GTK_SIGNAL_FUNC (revert_callback), NULL);
gtk_signal_connect (GTK_OBJECT (capplet), "cancel",
GTK_SIGNAL_FUNC (cancel_callback), NULL);
gtk_signal_connect (GTK_OBJECT (capplet), "ok",
GTK_SIGNAL_FUNC (ok_callback), NULL);
capplet_gtk_main (); gtk_main ();
if (restart_pending) { if (restart_pending) {
quit_pending = TRUE; quit_pending = TRUE;
gtk_main(); gtk_main();
} }
if (state == STATE_OK) {
wm_list_save ();
update_session ();
}
} }
else if (init_results == 3) {
do_get_xml ();
}
else if (init_results == 4) {
do_set_xml ();
}
else { else {
if (selected_wm && if (selected_wm &&
!selected_wm->session_managed && !selected_wm->session_managed &&