Author: kelnos
Date: 2008-10-23 06:13:18 +0000 (Thu, 23 Oct 2008)
New Revision: 28376
Modified:
xfce4-session/trunk/ChangeLog
xfce4-session/trunk/NEWS
xfce4-session/trunk/settings/session-editor.c
xfce4-session/trunk/settings/xfce4-session-settings.glade
Log:
* settings/xfce4-session-settings.glade: Remove 'remove' button
and add a 'save session' button. Add a session save progress
dialog.
* settings/session-editor.c: Add the ability to save the
session from the dialog.
Modified: xfce4-session/trunk/ChangeLog
===================================================================
--- xfce4-session/trunk/ChangeLog 2008-10-23 06:13:03 UTC (rev 28375)
+++ xfce4-session/trunk/ChangeLog 2008-10-23 06:13:18 UTC (rev 28376)
@@ -1,5 +1,13 @@
2008-10-22 Brian Tarricone <[EMAIL PROTECTED]>
+ * settings/xfce4-session-settings.glade: Remove 'remove' button
+ and add a 'save session' button. Add a session save progress
+ dialog.
+ * settings/session-editor.c: Add the ability to save the
+ session from the dialog.
+
+2008-10-22 Brian Tarricone <[EMAIL PROTECTED]>
+
* settings/session-editor.c: Validate the value for the
restart style hint to avoid a possible crash. Sort the
client list first by priority, then by program name. Allow
Modified: xfce4-session/trunk/NEWS
===================================================================
--- xfce4-session/trunk/NEWS 2008-10-23 06:13:03 UTC (rev 28375)
+++ xfce4-session/trunk/NEWS 2008-10-23 06:13:18 UTC (rev 28376)
@@ -6,6 +6,7 @@
(bug 4429).
- Make splash engines store their settings in Xfconf.
- Handle the ProcessID SM property properly.
+- Add a session editor to the settings dialog.
4.5.91
Modified: xfce4-session/trunk/settings/session-editor.c
===================================================================
--- xfce4-session/trunk/settings/session-editor.c 2008-10-23 06:13:03 UTC
(rev 28375)
+++ xfce4-session/trunk/settings/session-editor.c 2008-10-23 06:13:18 UTC
(rev 28376)
@@ -83,12 +83,71 @@
"org.xfce.SessionManager",
"/org/xfce/SessionManager",
"org.xfce.Session.Manager");
+
+ dbus_g_proxy_add_signal(manager_dbus_proxy, "ClientRegistered",
+ G_TYPE_STRING, G_TYPE_INVALID);
+ dbus_g_proxy_add_signal(manager_dbus_proxy, "StateChanged",
+ G_TYPE_UINT, G_TYPE_UINT, G_TYPE_INVALID);
}
return !!dbus_conn;
}
static void
+manager_state_changed_saving(DBusGProxy *proxy,
+ guint old_state,
+ guint new_state,
+ gpointer user_data)
+{
+ if(new_state == 1) /* idle. FIXME: enum this */
+ gtk_dialog_response(GTK_DIALOG(user_data), GTK_RESPONSE_ACCEPT);
+}
+
+static gboolean
+pulse_session_save_dialog(gpointer data)
+{
+ gtk_progress_bar_pulse(GTK_PROGRESS_BAR(data));
+ return TRUE;
+}
+
+static void
+session_editor_save_session(GtkWidget *btn,
+ GtkWidget *dialog)
+{
+ GtkWidget *pbar = g_object_get_data(G_OBJECT(dialog), "pbar");
+ guint pulse_id;
+ GError *error = NULL;
+
+ gtk_widget_set_sensitive(btn, FALSE);
+
+ if(!xfsm_manager_dbus_client_checkpoint(manager_dbus_proxy, "", &error)) {
+ xfce_message_dialog(GTK_WINDOW(gtk_widget_get_toplevel(btn)),
+ _("Session Save Error"), GTK_STOCK_DIALOG_ERROR,
+ _("Unable to save the session"),
+ error->message,
+ GTK_STOCK_CLOSE, GTK_RESPONSE_ACCEPT,
+ NULL);
+ gtk_widget_set_sensitive(btn, TRUE);
+ g_error_free(error);
+ return;
+ }
+
+ dbus_g_proxy_connect_signal(manager_dbus_proxy, "StateChanged",
+ G_CALLBACK(manager_state_changed_saving),
+ dialog, NULL);
+ pulse_id = g_timeout_add(250, pulse_session_save_dialog, pbar);
+
+ gtk_dialog_run(GTK_DIALOG(dialog));
+
+ g_source_remove(pulse_id);
+ dbus_g_proxy_disconnect_signal(manager_dbus_proxy, "StateChanged",
+ G_CALLBACK(manager_state_changed_saving),
+ dialog);
+ gtk_widget_hide(dialog);
+ gtk_widget_set_sensitive(btn, TRUE);
+}
+
+static void
session_editor_sel_changed_btn(GtkTreeSelection *sel,
GtkWidget *btn)
{
@@ -98,13 +157,6 @@
}
static void
-session_editor_remove_client(GtkWidget *btn,
- GtkWidget *treeview)
-{
-
-}
-
-static void
session_editor_quit_client(GtkWidget *btn,
GtkWidget *treeview)
{
@@ -552,8 +604,6 @@
GTK_SORT_ASCENDING);
g_object_unref(ls);
- dbus_g_proxy_add_signal(manager_dbus_proxy, "ClientRegistered",
- G_TYPE_STRING, G_TYPE_INVALID);
dbus_g_proxy_connect_signal(manager_dbus_proxy, "ClientRegistered",
G_CALLBACK(manager_client_registered),
treeview, NULL);
@@ -579,7 +629,7 @@
void
session_editor_init(GladeXML *gxml)
{
- GtkWidget *treeview, *btn_remove, *btn_quit;
+ GtkWidget *treeview, *btn_save, *btn_quit, *dlg_saving;
GtkTreeSelection *sel;
dbus_g_object_register_marshaller(g_cclosure_marshal_VOID__STRING,
@@ -596,12 +646,14 @@
sel = gtk_tree_view_get_selection(GTK_TREE_VIEW(treeview));
session_editor_populate_treeview(GTK_TREE_VIEW(treeview));
- btn_remove = glade_xml_get_widget(gxml, "btn_remove_client");
- g_signal_connect(btn_remove, "clicked",
- G_CALLBACK(session_editor_remove_client), treeview);
- //g_signal_connect(sel, "changed",
- // G_CALLBACK(session_editor_sel_changed_btn), btn_remove);
+ dlg_saving = glade_xml_get_widget(gxml, "dialog_saving");
+ g_object_set_data(G_OBJECT(dlg_saving), "pbar",
+ glade_xml_get_widget(gxml, "progress_save_session"));
+ btn_save = glade_xml_get_widget(gxml, "btn_save_session");
+ g_signal_connect(btn_save, "clicked",
+ G_CALLBACK(session_editor_save_session), dlg_saving);
+
btn_quit = glade_xml_get_widget(gxml, "btn_quit_client");
g_signal_connect(btn_quit, "clicked",
G_CALLBACK(session_editor_quit_client), treeview);
Modified: xfce4-session/trunk/settings/xfce4-session-settings.glade
===================================================================
--- xfce4-session/trunk/settings/xfce4-session-settings.glade 2008-10-23
06:13:03 UTC (rev 28375)
+++ xfce4-session/trunk/settings/xfce4-session-settings.glade 2008-10-23
06:13:18 UTC (rev 28376)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.4.5 on Mon Oct 20 00:11:57 2008 -->
+<!--Generated with glade3 3.4.5 on Wed Oct 22 22:47:27 2008 -->
<glade-interface>
<requires lib="xfce4"/>
<widget class="XfceTitledDialog" id="xfce4_session_settings_dialog">
@@ -442,7 +442,7 @@
<widget class="GtkLabel" id="label21">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">These
applications are a part of the currently-running session, and can be saved when
you log out.</property>
+ <property name="label" translatable="yes">These
applications are a part of the currently-running session, and can be saved when
you log out. Changes below will only take effect when the session is
saved.</property>
<property name="justify">GTK_JUSTIFY_FILL</property>
<property name="wrap">True</property>
</widget>
@@ -479,18 +479,39 @@
<property name="visible">True</property>
<property name="spacing">6</property>
<child>
- <widget class="GtkButton" id="btn_remove_client">
+ <widget class="GtkButton" id="btn_save_session">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
- <property name="tooltip" translatable="yes">Remove the
selected application from the session</property>
- <property name="label"
translatable="yes">gtk-remove</property>
- <property name="use_stock">True</property>
<property name="response_id">0</property>
+ <child>
+ <widget class="GtkHBox" id="hbox5">
+ <property name="visible">True</property>
+ <property name="spacing">4</property>
+ <child>
+ <widget class="GtkImage" id="image4">
+ <property name="visible">True</property>
+ <property name="xalign">1</property>
+ <property name="stock">gtk-save</property>
+ </widget>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label5">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Save
Sessio_n</property>
+ <property name="use_underline">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
</widget>
<packing>
<property name="expand">False</property>
+ <property name="position">1</property>
</packing>
</child>
<child>
@@ -516,7 +537,8 @@
<widget class="GtkLabel" id="label23">
<property name="visible">True</property>
<property name="xalign">0</property>
- <property name="label" translatable="yes">Quit
Program</property>
+ <property name="label"
translatable="yes">_Quit Program</property>
+ <property name="use_underline">True</property>
</widget>
<packing>
<property name="position">1</property>
@@ -527,7 +549,7 @@
</widget>
<packing>
<property name="expand">False</property>
- <property name="position">1</property>
+ <property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
</widget>
@@ -737,4 +759,95 @@
</widget>
</child>
</widget>
+ <widget class="GtkDialog" id="dialog_saving">
+ <property name="border_width">5</property>
+ <property name="title" translatable="yes">Saving Session</property>
+ <property name="resizable">False</property>
+ <property name="window_position">GTK_WIN_POS_CENTER_ON_PARENT</property>
+ <property name="destroy_with_parent">True</property>
+ <property name="icon_name">xfce4-session</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="skip_taskbar_hint">True</property>
+ <property name="skip_pager_hint">True</property>
+ <property name="transient_for">xfce4_session_settings_dialog</property>
+ <property name="has_separator">False</property>
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox2">
+ <property name="visible">True</property>
+ <property name="spacing">2</property>
+ <child>
+ <widget class="GtkVBox" id="vbox5">
+ <property name="visible">True</property>
+ <property name="border_width">6</property>
+ <property name="spacing">6</property>
+ <child>
+ <widget class="GtkHBox" id="hbox8">
+ <property name="visible">True</property>
+ <property name="spacing">12</property>
+ <child>
+ <widget class="GtkImage" id="image6">
+ <property name="visible">True</property>
+ <property name="stock">gtk-dialog-info</property>
+ <property name="icon_size">6</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkLabel" id="label10">
+ <property name="visible">True</property>
+ <property name="xalign">0</property>
+ <property name="label" translatable="yes">Your session is
being saved. If you do not wish to wait, you may close this window.</property>
+ <property name="justify">GTK_JUSTIFY_FILL</property>
+ <property name="wrap">True</property>
+ </widget>
+ <packing>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ </packing>
+ </child>
+ <child>
+ <widget class="GtkProgressBar" id="progress_save_session">
+ <property name="visible">True</property>
+ <property name="activity_mode">True</property>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area2">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+ <child>
+ <widget class="GtkButton" id="button3">
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="label" translatable="yes">gtk-close</property>
+ <property name="use_stock">True</property>
+ <property name="response_id">0</property>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="expand">False</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+ </widget>
</glade-interface>
_______________________________________________
Xfce4-commits mailing list
[email protected]
http://foo-projects.org/mailman/listinfo/xfce4-commits