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

Reply via email to