diff --git a/gnome-session-tile-ui.patch b/gnome-session-tile-ui.patch
index 4282f8c..584a3c5 100644
--- a/gnome-session-tile-ui.patch
+++ b/gnome-session-tile-ui.patch
@@ -1,401 +1,54 @@
---- gnome-session-2.16.1/gnome-session/logout.c
-+++ gnome-session-2.16.1/gnome-session/logout.c
-@@ -41,6 +41,15 @@
- #include "gdm-logout-action.h"
- #include "gsm-multiscreen.h"
+--- gnome-session-2.19.6/gnome-session/logout.c
++++ gnome-session-2.19.6/gnome-session/logout.c
+@@ -44,6 +44,14 @@
-+
-+enum
-+{
+ enum
+ {
+ GS_RESPONSE_LOGOUT,
+ GS_RESPONSE_SHUTDOWN,
+ GS_RESPONSE_RESTART,
+ GS_RESPONSE_LOCK
+};
+
- enum
- {
- OPTION_LOGOUT,
-@@ -73,7 +82,26 @@
- int callback_id;
- } FadeoutData;
-
-+static GtkWidget *ssui_get_tile(GtkWidget *image, const gchar *title,
-+ const gchar *desc);
-+static void logout_button_clicked(GtkButton *button, gpointer user_data);
-+static void shutdown_button_clicked(GtkButton *button, gpointer user_data);
-+static void restart_button_clicked(GtkButton *button, gpointer user_data);
-+static void lock_button_clicked(GtkButton *button, gpointer user_data);
-+static gboolean logout_dialog_callback (GtkWidget *dialog);
-+static gboolean logout_dialog_configure_cb( GtkWidget *widget,
-+ GdkEventConfigure *event,
-+ gpointer data);
-+static gboolean logout_dialog_focus_out_cb( GtkWidget *widget,
-+ GdkEventFocus *event,
-+ gpointer data);
-+static void window_get_frame_extents (GdkWindow *window, gint *left,
-+ gint *right, gint *top, gint *bottom);
-+
-+
- static GList *fadeout_windows = NULL;
-+static GList *ionly_windows = NULL;
-+
-
- /* Go for five seconds */
- #define FADE_DURATION 1500.0
-@@ -122,115 +150,234 @@
-
- if (elapsed > FADE_DURATION)
- {
-- get_current_frame (fadeout, 0.0);
-- gdk_draw_pixbuf (fadeout->draw_pixmap,
-- fadeout->gc,
-- fadeout->frame,
-- 0, 0,
-- 0, 0,
-- fadeout->area.width,
-- fadeout->area.height,
-- GDK_RGB_DITHER_NONE,
-- 0, 0);
-- gdk_window_clear (fadeout->draw_window);
-+ get_current_frame (fadeout, 0.0);
-+ gdk_draw_pixbuf (fadeout->draw_pixmap,
-+ fadeout->gc,
-+ fadeout->frame,
-+ 0, 0,
-+ 0, 0,
-+ fadeout->area.width,
-+ fadeout->area.height,
-+ GDK_RGB_DITHER_NONE,
-+ 0, 0);
-+ gdk_window_clear (fadeout->draw_window);
-
-- fadeout->callback_id = 0;
-- return FALSE;
-- }
-+ fadeout->callback_id = 0;
-+ return FALSE;
-+ }
-
- percent = elapsed / FADE_DURATION;
-
- get_current_frame (fadeout, 1.0 - percent);
- gdk_draw_pixbuf (fadeout->draw_pixmap,
-- fadeout->gc,
-- fadeout->frame,
-- 0, 0,
-- 0, 0,
-- fadeout->area.width,
-- fadeout->area.height,
-- GDK_RGB_DITHER_NONE,
-- 0, 0);
-+ fadeout->gc,
-+ fadeout->frame,
-+ 0, 0,
-+ 0, 0,
-+ fadeout->area.width,
-+ fadeout->area.height,
-+ GDK_RGB_DITHER_NONE,
-+ 0, 0);
- gdk_window_clear (fadeout->draw_window);
-
- gdk_flush ();
--
-+
- return TRUE;
- }
--
-+
- static void
--fadeout_screen (GdkScreen *screen,
-- int monitor)
-+fadeout_screen (GdkScreen *screen, int monitor)
- {
-- GdkWindowAttr attr;
-- int attr_mask;
-- GdkGCValues values;
-- FadeoutData *fadeout;
-- GdkAtom property = gdk_atom_intern ("_NET_WM_STATE_DISPLAY_MODAL", FALSE);
--
-- if (gdk_x11_screen_supports_net_wm_hint (screen, property))
-- return;
--
-- fadeout = g_new (FadeoutData, 1);
--
-- fadeout->screen = screen;
-- fadeout->monitor = monitor;
--
-- fadeout->area.x = gsm_screen_get_x (screen, monitor);
-- fadeout->area.y = gsm_screen_get_y (screen, monitor);
-- fadeout->area.width = gsm_screen_get_width (screen, monitor);
-- fadeout->area.height = gsm_screen_get_height (screen, monitor);
--
-- fadeout->root_window = gdk_screen_get_root_window (screen);
-- attr.window_type = GDK_WINDOW_CHILD;
-- attr.x = fadeout->area.x;
-- attr.y = fadeout->area.y;
-- attr.width = fadeout->area.width;
-- attr.height = fadeout->area.height;
-- attr.wclass = GDK_INPUT_OUTPUT;
-- attr.visual = gdk_screen_get_system_visual (fadeout->screen);
-- attr.colormap = gdk_screen_get_default_colormap (fadeout->screen);
-- attr.override_redirect = TRUE;
-- attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP | GDK_WA_NOREDIR;
--
-- fadeout->draw_window = gdk_window_new (fadeout->root_window, &attr, attr_mask);
-- fadeout->draw_pixmap = gdk_pixmap_new (fadeout->draw_window, fadeout->area.width, fadeout->area.height, gdk_drawable_get_depth (fadeout->draw_window));
-- fadeout_windows = g_list_prepend (fadeout_windows, fadeout);
--
-- fadeout->start_pb = gdk_pixbuf_get_from_drawable (NULL,
-- fadeout->root_window,
-- NULL,
-- fadeout->area.x,
-- fadeout->area.y,
-- 0, 0,
-- fadeout->area.width,
-- fadeout->area.height);
--
-- fadeout->frame = gdk_pixbuf_copy (fadeout->start_pb);
-- fadeout->rowstride = gdk_pixbuf_get_rowstride (fadeout->start_pb);
-+ GdkGCValues values;
-+ GdkWindowAttr attr;
-+ int attr_mask;
-+ FadeoutData *fadeout;
-+ FadeoutData *indata;
-+
-+ indata = g_new (FadeoutData, 1);
-+
-+ indata->screen = screen;
-+ indata->monitor = monitor;
-+
-+ indata->area.x = gsm_screen_get_x (screen, monitor);
-+ indata->area.y = gsm_screen_get_y (screen, monitor);
-+ indata->area.width = gsm_screen_get_width (screen, monitor);
-+ indata->area.height = gsm_screen_get_height (screen, monitor);
-+
-+ indata->root_window = gdk_screen_get_root_window (screen);
-+
-+ attr.window_type = GDK_WINDOW_CHILD;
-+ attr.x = indata->area.x;
-+ attr.y = indata->area.y;
-+ attr.width = indata->area.width;
-+ attr.height = indata->area.height;
-+ attr.wclass = GDK_INPUT_ONLY;
-+ attr.override_redirect = TRUE;
-+ attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_NOREDIR;
-+
-+ indata->draw_window = gdk_window_new (indata->root_window,
-+ &attr, attr_mask);
-+ indata->draw_pixmap = NULL;
-+ indata->start_pb = NULL;
-+ indata->frame = NULL;
-+ indata->gc = NULL;
-+ indata->callback_id = 0;
-+ gdk_window_show (indata->draw_window);
-+ ionly_windows = g_list_prepend (ionly_windows, indata);
-+
-+ GdkAtom property = gdk_atom_intern ("_NET_WM_STATE_DISPLAY_MODAL", FALSE);
-+ // if we have setup our little window manager coolness, then
-+ // just create a GTK_INPUT_ONLY window to handle no input
-+ if(!gdk_x11_screen_supports_net_wm_hint (screen, property))
-+ {
-+ fadeout = g_new (FadeoutData, 1);
-
-- fadeout->start_p = gdk_pixbuf_get_pixels (fadeout->start_pb);
-- fadeout->frame_p = gdk_pixbuf_get_pixels (fadeout->frame);
--
-- values.subwindow_mode = GDK_INCLUDE_INFERIORS;
-+ fadeout->screen = screen;
-+ fadeout->monitor = monitor;
-
-- fadeout->gc = gdk_gc_new_with_values (fadeout->root_window, &values, GDK_GC_SUBWINDOW);
-+ fadeout->area.x = gsm_screen_get_x (screen, monitor);
-+ fadeout->area.y = gsm_screen_get_y (screen, monitor);
-+ fadeout->area.width = gsm_screen_get_width (screen, monitor);
-+ fadeout->area.height = gsm_screen_get_height (screen, monitor);
-+
-+ fadeout->root_window = gdk_screen_get_root_window (screen);
-+
-+ attr.window_type = GDK_WINDOW_TOPLEVEL;
-+ attr.x = fadeout->area.x;
-+ attr.y = fadeout->area.y;
-+ attr.width = fadeout->area.width;
-+ attr.height = fadeout->area.height;
-+ attr.wclass = GDK_INPUT_OUTPUT;
-+ attr.visual = gdk_screen_get_system_visual (fadeout->screen);
-+ attr.colormap = gdk_screen_get_default_colormap (fadeout->screen);
-+ attr.override_redirect = FALSE;
-+ attr_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP |
-+ GDK_WA_NOREDIR;
-+
-+ fadeout->draw_window = gdk_window_new (fadeout->root_window,
-+ &attr, attr_mask);
-+
-+ gdk_window_set_decorations(fadeout->draw_window, 0);
-+
-+ fadeout->draw_pixmap = gdk_pixmap_new (fadeout->draw_window,
-+ fadeout->area.width, fadeout->area.height,
-+ gdk_drawable_get_depth (fadeout->draw_window));
-+
-+ fadeout_windows = g_list_prepend (fadeout_windows, fadeout);
-+
-+ fadeout->start_pb = gdk_pixbuf_get_from_drawable (NULL,
-+ fadeout->root_window,
-+ NULL,
-+ fadeout->area.x,
-+ fadeout->area.y,
-+ 0, 0,
-+ fadeout->area.width,
-+ fadeout->area.height);
-+
-+ fadeout->frame = gdk_pixbuf_copy (fadeout->start_pb);
-+ fadeout->rowstride = gdk_pixbuf_get_rowstride (fadeout->start_pb);
-+
-+ fadeout->start_p = gdk_pixbuf_get_pixels (fadeout->start_pb);
-+ fadeout->frame_p = gdk_pixbuf_get_pixels (fadeout->frame);
-+
-+ values.subwindow_mode = GDK_INCLUDE_INFERIORS;
-+
-+ fadeout->gc = gdk_gc_new_with_values (fadeout->root_window, &values,
-+ GDK_GC_SUBWINDOW);
-+
-+ gdk_window_set_back_pixmap (fadeout->draw_window, NULL, FALSE);
-+ gdk_window_show (fadeout->draw_window);
-+
-+ gdk_window_move(fadeout->draw_window, attr.x, attr.y);
-+ gdk_window_stick(fadeout->draw_window);
-+ gdk_window_set_keep_above(fadeout->draw_window, TRUE);
-+
-+ gdk_draw_pixbuf (fadeout->draw_pixmap,
-+ fadeout->gc,
-+ fadeout->frame,
-+ 0, 0,
-+ 0, 0,
-+ fadeout->area.width,
-+ fadeout->area.height,
-+ GDK_RGB_DITHER_NONE,
-+ 0, 0);
-+
-+ gdk_window_set_back_pixmap (fadeout->draw_window,
-+ fadeout->draw_pixmap, FALSE);
-+ gdk_window_clear (fadeout->draw_window);
-+ g_get_current_time (&fadeout->start_time);
-
-- gdk_window_set_back_pixmap (fadeout->draw_window, NULL, FALSE);
-- gdk_window_show (fadeout->draw_window);
-- gdk_draw_pixbuf (fadeout->draw_pixmap,
-- fadeout->gc,
-- fadeout->frame,
-- 0, 0,
-- 0, 0,
-- fadeout->area.width,
-- fadeout->area.height,
-- GDK_RGB_DITHER_NONE,
-- 0, 0);
-- gdk_window_set_back_pixmap (fadeout->draw_window, fadeout->draw_pixmap, FALSE);
-- gdk_window_clear (fadeout->draw_window);
--
-- g_get_current_time (&fadeout->start_time);
-- fadeout->callback_id = g_idle_add ((GSourceFunc) fadeout_callback, fadeout);
-+ fadeout->callback_id = g_idle_add ((GSourceFunc) fadeout_callback,
-+ fadeout);
-+ }
-+
-+}
-+
-+static void
-+ssui_punch_hole_fadeout_windows (GtkWindow *dialog)
++enum
+{
-+ GList *l;
-+ GdkRectangle dialogRect, parentRect;
-+ gint left, right, top, bottom;
-+ gint monitor;
-+ GdkWindow *parent;
-+ GdkOverlapType overlap;
-+ GdkRegion *parentRegion, *dialogRegion;
-+
-+ // Loop through screens and monitors and punch and fill holes where needed
-+ for (l = ionly_windows; l; l = l->next)
-+ {
-+ FadeoutData *fadeout = l->data;
-+ parent = fadeout->draw_window;
-+
-+ // don't use this, it doesn't work with compiz correctly
-+ // gdk_window_get_frame_extents(dialog, &dialogRect);
-+
-+ gdk_window_get_position(GTK_WIDGET(dialog)->window, &dialogRect.x,
-+ &dialogRect.y);
-+ gdk_window_get_geometry(GTK_WIDGET(dialog)->window, NULL, NULL,
-+ &dialogRect.width, &dialogRect.height, NULL);
-+ window_get_frame_extents (GTK_WIDGET(dialog)->window, &left, &right,
-+ &top, &bottom);
-+ dialogRect.x -= left;
-+ dialogRect.y -= top;
-+ dialogRect.width += left + right;
-+ dialogRect.height += top + bottom;
-+
-+ gdk_window_get_frame_extents(parent, &parentRect);
-+
-+ // Adjust the dialog rect to be relative to this the parent
-+ dialogRect.x = dialogRect.x - parentRect.x;
-+ dialogRect.y = dialogRect.y - parentRect.y;
-+
-+ // set the parents rect to be relative to this display (0,0)
-+ parentRect.x = 0;
-+ parentRect.y = 0;
-+ parentRegion = gdk_region_rectangle(&parentRect);
-+ if(parentRegion)
-+ {
-+ overlap = gdk_region_rect_in(parentRegion, &dialogRect);
-+ if(overlap == GDK_OVERLAP_RECTANGLE_OUT)
-+ {
-+ // re-protect the parent
-+ gdk_window_shape_combine_region(parent, NULL, 0, 0);
-+ }
-+ else
-+ {
-+ dialogRegion = gdk_region_rectangle(&dialogRect);
-+ if(dialogRegion)
-+ {
-+
-+ // subtract the dialog from the parent
-+ gdk_region_subtract(parentRegion, dialogRegion);
-+ gdk_window_shape_combine_region(parent, parentRegion, 0, 0);
-+
-+ gdk_region_destroy(dialogRegion);
-+ }
-+ }
-+ gdk_region_destroy(parentRegion);
-+ }
-+ }
+ OPTION_LOGOUT,
+ OPTION_HALT,
+ OPTION_REBOOT,
+@@ -260,82 +268,128 @@
+ fadeout_windows = NULL;
}
- static void
-@@ -258,83 +405,52 @@
-
- g_list_free (fadeout_windows);
- fadeout_windows = NULL;
--}
--
-static GtkWidget *
-make_title_label (const char *text)
--{
++
++
++static GtkWidget*
++get_tile(GtkWidget *image, const gchar *title, const gchar *desc)
+ {
- GtkWidget *label;
- char *full;
--
++ GtkWidget *button;
++ GtkWidget *alignment;
++ GtkWidget *hbox;
++ GtkWidget *vbox;
+
- full = g_strdup_printf ("%s", text);
- label = gtk_label_new (full);
- g_free (full);
--
++ g_assert(title != NULL);
+
- gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
- gtk_label_set_use_markup (GTK_LABEL (label), TRUE);
++ button = GTK_WIDGET(gtk_button_new());
++ gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
++// GTK_WIDGET_UNSET_FLAGS(button, GTK_HAS_FOCUS);
- return label;
-}
-+ for (l = ionly_windows; l; l = l->next)
-+ {
-+ FadeoutData *fadeout = l->data;
-+ gdk_window_hide (fadeout->draw_window);
++ alignment = gtk_alignment_new(0, 0.5, 0, 0);
++ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 6, 6);
++ gtk_container_add(GTK_CONTAINER(button), alignment);
-static int
-get_default_option (void)
@@ -403,198 +56,160 @@
- GConfClient *gconf_client;
- char *str;
- int option;
-+ if (fadeout->callback_id)
-+ g_source_remove (fadeout->callback_id);
++ hbox = gtk_hbox_new(FALSE, 12);
++ gtk_container_add(GTK_CONTAINER(alignment), hbox);
++ if(image != NULL)
++ gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
++
++ vbox = gtk_vbox_new(FALSE, 2);
++
++ if(title != NULL)
++ {
++ gchar *full;
++ GtkWidget *label;
++
++ full = g_strdup_printf ("%s", title);
++ label = gtk_label_new(full);
++ g_free (full);
++
++ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
++ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
++ gtk_label_set_use_underline(GTK_LABEL(label), TRUE);
++
++ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
++ }
++
++ if(desc != NULL)
++ {
++ gchar *full;
++ GtkWidget *label;
++
++ full = g_strdup_printf ("%s",
++ desc);
++ label = gtk_label_new(full);
++ g_free (full);
++
++ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
++ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
++ gtk_label_set_use_underline(GTK_LABEL(label), TRUE);
++ gtk_label_set_line_wrap(GTK_LABEL (label), TRUE);
- gconf_client = gsm_get_conf_client ();
- str = gconf_client_get_string (gconf_client, LOGOUT_OPTION_KEY, NULL);
-+ if(fadeout->gc)
-+ g_object_unref (fadeout->gc);
-+ if(fadeout->start_pb)
-+ g_object_unref (fadeout->start_pb);
-+ if(fadeout->frame)
-+ g_object_unref (fadeout->frame);
-+
-+ if(fadeout->draw_window)
-+ g_object_unref (fadeout->draw_window);
-+ if(fadeout->draw_pixmap)
-+ g_object_unref (fadeout->draw_pixmap);
++ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
++ }
- if (str == NULL || !gconf_string_to_enum (logout_options_lookup_table, str, &option))
- option = OPTION_LOGOUT;
-+ g_free (fadeout);
-+ }
++ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
- g_free (str);
- return option;
-+ g_list_free (ionly_windows);
-+ ionly_windows = NULL;
++ return button;
}
-static void
-set_default_option (int option)
--{
++static void logout_button_clicked(GtkButton *button, gpointer user_data)
+ {
- GConfClient *gconf_client;
- const char *str;
--
++ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_LOGOUT);
++}
+
- gconf_client = gsm_get_conf_client ();
--
++static void shutdown_button_clicked(GtkButton *button, gpointer user_data)
++{
++ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_SHUTDOWN);
++}
+
- str = gconf_enum_to_string (logout_options_lookup_table, option);
- g_assert (str != NULL);
--
-- gconf_client_set_string (gconf_client, LOGOUT_OPTION_KEY, str, NULL);
--}
++static void restart_button_clicked(GtkButton *button, gpointer user_data)
++{
++ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_RESTART);
++}
+- gconf_client_set_string (gconf_client, LOGOUT_OPTION_KEY, str, NULL);
++static void lock_button_clicked(GtkButton *button, gpointer user_data)
++{
++ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_LOCK);
+ }
+
++
++
static gboolean
display_gui (void)
{
-- GtkWidget *box;
+ GtkWidget *box;
- GtkWidget *title;
- GtkWidget *hbox;
-- GtkWidget *vbox;
-- GtkWidget *image;
++ //GtkWidget *title;
++ //GtkWidget *hbox;
+ GtkWidget *vbox;
+ GtkWidget *image;
- GtkWidget *toggle_button = NULL;
-- gint response;
++ //GtkWidget *toggle_button = NULL;
+ gint response;
- GtkWidget *halt = NULL;
- GtkWidget *reboot = NULL;
- GtkWidget *suspend = NULL;
-- GtkWidget *invisible;
++ //GtkWidget *halt = NULL;
++ //GtkWidget *reboot = NULL;
++ //GtkWidget *suspend = NULL;
+ GtkWidget *invisible;
- gboolean halt_supported = FALSE;
- gboolean reboot_supported = FALSE;
- gboolean suspend_supported = FALSE;
-- gboolean retval = FALSE;
++ //gboolean halt_supported = FALSE;
++ //gboolean reboot_supported = FALSE;
++ //gboolean suspend_supported = FALSE;
+ gboolean retval = FALSE;
- gboolean save_active = FALSE;
- gboolean halt_active = FALSE;
- gboolean reboot_active = FALSE;
- gboolean suspend_active = FALSE;
- GdmLogoutAction logout_action = GDM_LOGOUT_ACTION_NONE;
-- gboolean a11y_enabled;
-- GError *error = NULL;
-- GdkScreen *screen;
-- int monitor;
++ //gboolean save_active = FALSE;
++ //gboolean halt_active = FALSE;
++ //gboolean reboot_active = FALSE;
++ //gboolean suspend_active = FALSE;
++ //GdmLogoutAction logout_action = GDM_LOGOUT_ACTION_NONE;
+ gboolean iris_effect_enabled;
+ gboolean grab_xserver;
+ GError *error = NULL;
+ GdkScreen *screen;
+ int monitor;
- int selected_option;
-+ GtkWidget *logoutDlg;
-+ GtkWidget *vbox;
-+ GtkWidget *image;
-+ GtkWidget *tile;
-+ gint response;
-+ GtkWidget *invisible;
-+ GtkIconTheme *iconTheme;
-+ GdkPixbuf *themePixbuf = NULL;
-+ gboolean retval = FALSE;
-+ gboolean showDialog = FALSE;
-+ gboolean a11y_enabled;
-+ GError *error = NULL;
-+ GdkScreen *screen;
-+ int monitor;
++ //int selected_option;
++
++ GdkPixbuf *themePixbuf = NULL;
++ GtkIconTheme *iconTheme;
++ GtkWidget *tile;
++
gsm_verbose ("display_gui: showing logout dialog\n");
-@@ -355,278 +471,364 @@
+@@ -387,106 +441,188 @@
- a11y_enabled = GTK_IS_ACCESSIBLE (gtk_widget_get_accessible (invisible));
+ gtk_dialog_set_has_separator (GTK_DIALOG (box), FALSE);
-- /* Only create a managed window if a11y is enabled */
-+ logoutDlg = g_object_new (GTK_TYPE_DIALOG,
-+ "type", GTK_WINDOW_TOPLEVEL,
-+ NULL);
- if (!a11y_enabled)
-- {
-- while (1)
-+ {
-+ atk_object_set_role (gtk_widget_get_accessible (logoutDlg),
-+ ATK_ROLE_ALERT);
-+ }
-+ gtk_window_set_decorated (GTK_WINDOW (logoutDlg), TRUE);
-+ gtk_window_set_title(GTK_WINDOW(logoutDlg), _("Log Out"));
-+ gtk_dialog_set_has_separator (GTK_DIALOG (logoutDlg), FALSE);
-+
-+ // setup specs from Gnome HIG
-+ gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (logoutDlg)->vbox), 12);
-+ gtk_container_set_border_width (GTK_CONTAINER(logoutDlg), 6);
-+
-+ vbox = gtk_vbox_new (FALSE, 12);
-+ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (logoutDlg)->vbox), vbox,
-+ FALSE, FALSE, 0);
-+ gtk_container_set_border_width(GTK_CONTAINER (vbox), 6);
-+ gtk_widget_show (vbox);
+
+
-+ gtk_window_set_screen (GTK_WINDOW (logoutDlg), screen);
-+ gtk_window_set_policy (GTK_WINDOW (logoutDlg), FALSE, FALSE, TRUE);
-+ gtk_window_set_keep_above(GTK_WINDOW(logoutDlg), TRUE);
-+ gtk_window_stick(GTK_WINDOW(logoutDlg));
+
-+ iconTheme = gtk_icon_theme_get_for_screen(screen);
-+ //iconTheme = gtk_icon_theme_get_default ();
+
-+ // add help button in every case
-+ gtk_dialog_add_button (GTK_DIALOG (logoutDlg), GTK_STOCK_HELP,
-+ GTK_RESPONSE_HELP);
++ // setup specs from Gnome HIG
++ gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (box)->vbox), 12);
++ gtk_container_set_border_width (GTK_CONTAINER(box), 6);
+
-+ gtk_dialog_add_button (GTK_DIALOG (logoutDlg),
-+ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
-+
-+ // ============ LOGOUT TILE ============
-+ image = NULL;
-+ if(gtk_icon_theme_has_icon(iconTheme, "system-log-out"))
- {
-- if (gdk_pointer_grab (invisible->window, FALSE, 0,
-- NULL, NULL, GDK_CURRENT_TIME) == Success)
-- {
-- if (gdk_keyboard_grab (invisible->window, FALSE, GDK_CURRENT_TIME)
-- == Success)
-- break;
-- gdk_pointer_ungrab (GDK_CURRENT_TIME);
-- }
-- sleep (1);
-- }
--
-- box = g_object_new (GTK_TYPE_DIALOG,
-- "type", GTK_WINDOW_POPUP,
-- NULL);
-- }
-- else
-- {
-- box = gtk_dialog_new ();
-- atk_object_set_role (gtk_widget_get_accessible (box), ATK_ROLE_ALERT);
-- gtk_window_set_decorated (GTK_WINDOW (box), FALSE);
-- }
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "system-log-out", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-logout"))
-+ {
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "gnome-logout", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ if(image == NULL)
-+ {
-+ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
-+ GTK_ICON_SIZE_DIALOG);
-+ }
-+ tile = ssui_get_tile(image, _("_Log Out"),
-+ _("Ends your session and logs you out."));
-+ g_signal_connect (G_OBJECT (tile), "clicked",
-+ G_CALLBACK (logout_button_clicked), logoutDlg);
-
-- gtk_dialog_set_has_separator (GTK_DIALOG (box), FALSE);
-+ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
-+ gtk_widget_show_all(tile);
-
-- vbox = gtk_vbox_new (FALSE, 12);
+ vbox = gtk_vbox_new (FALSE, 12);
- gtk_box_pack_start (GTK_BOX (GTK_DIALOG (box)->vbox), vbox, FALSE, FALSE, 0);
- gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (box)->vbox), 2);
- gtk_container_set_border_width (GTK_CONTAINER (vbox), 5);
-- gtk_widget_show (vbox);
++ gtk_box_pack_start (GTK_BOX (GTK_DIALOG (box)->vbox), vbox,
++ FALSE, FALSE, 0);
++ gtk_container_set_border_width(GTK_CONTAINER (vbox), 6);
+ gtk_widget_show (vbox);
-
- hbox = gtk_hbox_new (FALSE, 12);
- gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0);
@@ -614,55 +229,184 @@
- gtk_dialog_add_button (GTK_DIALOG (box), GTK_STOCK_OK, GTK_RESPONSE_OK);
- gtk_dialog_set_default_response (GTK_DIALOG (box), GTK_RESPONSE_OK);
-- gtk_window_set_screen (GTK_WINDOW (box), screen);
-- gtk_window_set_policy (GTK_WINDOW (box), FALSE, FALSE, TRUE);
++
+ gtk_window_set_screen (GTK_WINDOW (box), screen);
+- gtk_window_set_resizable (GTK_WINDOW (box), FALSE);
++ gtk_window_set_policy (GTK_WINDOW (box), FALSE, FALSE, TRUE);
++ gtk_window_set_keep_above(GTK_WINDOW(box), TRUE);
++ gtk_window_stick(GTK_WINDOW(box));
++
++ iconTheme = gtk_icon_theme_get_for_screen(screen);
++ //iconTheme = gtk_icon_theme_get_default ();
++
++ // add help button in every case
++ gtk_dialog_add_button (GTK_DIALOG (box), GTK_STOCK_HELP,
++ GTK_RESPONSE_HELP);
++
++ gtk_dialog_add_button (GTK_DIALOG (box),
++ GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL);
++
++ // ============ LOGOUT TILE ============
++ image = NULL;
++ if(gtk_icon_theme_has_icon(iconTheme, "system-log-out"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "system-log-out", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-logout"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "gnome-logout", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ if(image == NULL)
++ {
++ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
++ GTK_ICON_SIZE_DIALOG);
++ }
++ tile = get_tile(image, _("_Log Out"),
++ _("Ends your session and logs you out."));
++ g_signal_connect (G_OBJECT (tile), "clicked",
++ G_CALLBACK (logout_button_clicked), box);
++
++ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
++ gtk_widget_show_all(tile);
++
++
++
++ // ============ LOCK TILE ============
++ image = NULL;
++ if(gtk_icon_theme_has_icon(iconTheme, "system-lock-screen"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "system-lock-screen", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-lockscreen"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "gnome-lockscreen", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ if(image == NULL)
++ {
++ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
++ GTK_ICON_SIZE_DIALOG);
++ }
++ tile = get_tile(image, _("Loc_k Screen"),
++ _("Locks this computer's screen."));
++ g_signal_connect (G_OBJECT (tile), "clicked",
++ G_CALLBACK (lock_button_clicked), box);
++
++ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
++ gtk_widget_show_all(tile);
++
++
++
++ // ============ SHUTDOWN TILE ============
++ //if(panel_power_manager_can_power_down (powerManager))
++ if(gdm_supports_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN))
++ {
++ image = NULL;
++ if(gtk_icon_theme_has_icon(iconTheme, "system-shutdown"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "system-shutdown", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-shutdown"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "gnome-shutdown", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ if(image == NULL)
++ {
++ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
++ GTK_ICON_SIZE_DIALOG);
++ }
++ tile = get_tile(image, _("_Shutdown"),
++ _("Ends your session and turns off the computer."));
++ g_signal_connect (G_OBJECT (tile), "clicked",
++ G_CALLBACK (shutdown_button_clicked), box);
++
++ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
++ gtk_widget_show_all(tile);
++ }
++
++
++
++ // ============ RESTART TILE ============
++ //if(panel_power_manager_can_power_down (powerManager))
++ if(gdm_supports_logout_action (GDM_LOGOUT_ACTION_REBOOT))
++ {
++ image = NULL;
++ if(gtk_icon_theme_has_icon(iconTheme, "stock_refresh"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "stock_refresh", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-reboot"))
++ {
++ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
++ "gnome-reboot", 48, 0, &error);
++ if(themePixbuf != NULL)
++ image = gtk_image_new_from_pixbuf(themePixbuf);
++ else
++ image = NULL;
++ }
++ if(image == NULL)
++ {
++ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
++ GTK_ICON_SIZE_DIALOG);
++ }
++ tile = get_tile(image, _("_Restart"),
++ _("Ends your session and restarts the computer."));
++ g_signal_connect (G_OBJECT (tile), "clicked",
++ G_CALLBACK (restart_button_clicked), box);
++
++ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
++ gtk_widget_show_all(tile);
++ }
- gtk_container_set_border_width (GTK_CONTAINER (box), 5);
-+ // ============ LOCK TILE ============
-+ image = NULL;
-+ if(gtk_icon_theme_has_icon(iconTheme, "system-lock-screen"))
-+ {
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "system-lock-screen", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-lockscreen"))
-+ {
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "gnome-lockscreen", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ if(image == NULL)
-+ {
-+ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
-+ GTK_ICON_SIZE_DIALOG);
-+ }
-+ tile = ssui_get_tile(image, _("Loc_k Screen"),
-+ _("Locks this computer's screen."));
-+ g_signal_connect (G_OBJECT (tile), "clicked",
-+ G_CALLBACK (lock_button_clicked), logoutDlg);
- if (!autosave)
- {
-- toggle_button = gtk_check_button_new_with_mnemonic (_("_Save current setup"));
+- toggle_button = gtk_check_button_new_with_mnemonic (_("Remember running applications"));
- gtk_widget_show (toggle_button);
- gtk_box_pack_start (GTK_BOX (vbox),
- toggle_button,
- FALSE, TRUE, 0);
- }
-+ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
-+ gtk_widget_show_all(tile);
-
+-
- halt_supported = gdm_supports_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN);
- reboot_supported = gdm_supports_logout_action (GDM_LOGOUT_ACTION_REBOOT);
- suspend_supported = gdm_supports_logout_action (GDM_LOGOUT_ACTION_SUSPEND);
-
+-
- if (halt_supported || reboot_supported || suspend_supported)
- {
- GtkWidget *title, *spacer;
@@ -697,7 +441,10 @@
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (r), (selected_option == OPTION_LOGOUT));
- gtk_box_pack_start (GTK_BOX (action_vbox), r, FALSE, FALSE, 0);
- gtk_widget_show (r);
--
++ gtk_dialog_set_default_response (GTK_DIALOG (box),
++ GTK_RESPONSE_CANCEL);
++
+
- if (halt_supported)
- {
- r = halt = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (r), _("Sh_ut down"));
@@ -705,7 +452,7 @@
- gtk_box_pack_start (GTK_BOX (action_vbox), r, FALSE, FALSE, 0);
- gtk_widget_show (r);
- }
--
+
- if (reboot_supported)
- {
- r = reboot = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (r), _("_Restart the computer"));
@@ -719,135 +466,21 @@
- gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (r), (selected_option == OPTION_SUSPEND));
- gtk_box_pack_start (GTK_BOX (action_vbox), r, FALSE, FALSE, 0);
- gtk_widget_show (r);
-+
-+ // ============ SHUTDOWN TILE ============
-+ //if(panel_power_manager_can_power_down (powerManager))
-+ if(gdm_supports_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN))
-+ {
-+ image = NULL;
-+ if(gtk_icon_theme_has_icon(iconTheme, "system-shutdown"))
-+ {
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "system-shutdown", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-shutdown"))
-+ {
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "gnome-shutdown", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ if(image == NULL)
-+ {
-+ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
-+ GTK_ICON_SIZE_DIALOG);
-+ }
-+ tile = ssui_get_tile(image, _("_Shutdown"),
-+ _("Ends your session and turns off the computer."));
-+ g_signal_connect (G_OBJECT (tile), "clicked",
-+ G_CALLBACK (shutdown_button_clicked), logoutDlg);
-+
-+ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
-+ gtk_widget_show_all(tile);
- }
+- }
- }
-- gsm_center_window_on_screen (GTK_WINDOW (box), screen, monitor);
+ gsm_center_window_on_screen (GTK_WINDOW (box), screen, monitor);
-- /* Grabbing the Xserver when accessibility is enabled will cause
-- * a hang. See #93103 for details.
-- */
-- if (!a11y_enabled)
-- {
-- /* Really necessary?
-- XGrabServer (GDK_DISPLAY ());
-- */
-- gsm_foreach_screen (fadeout_screen);
-- }
+@@ -518,27 +654,6 @@
-- gtk_widget_show_all (box);
-+ // ============ RESTART TILE ============
-+ //if(panel_power_manager_can_power_down (powerManager))
-+ if(gdm_supports_logout_action (GDM_LOGOUT_ACTION_REBOOT))
-+ {
-+ image = NULL;
-+ if(gtk_icon_theme_has_icon(iconTheme, "stock_refresh"))
-+ {
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "stock_refresh", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ else if(gtk_icon_theme_has_icon(iconTheme, "gnome-reboot"))
-+ {
-+ themePixbuf = gtk_icon_theme_load_icon(iconTheme,
-+ "gnome-reboot", 48, 0, &error);
-+ if(themePixbuf != NULL)
-+ image = gtk_image_new_from_pixbuf(themePixbuf);
-+ else
-+ image = NULL;
-+ }
-+ if(image == NULL)
-+ {
-+ image = gtk_image_new_from_stock (GTK_STOCK_DIALOG_QUESTION,
-+ GTK_ICON_SIZE_DIALOG);
-+ }
-+ tile = ssui_get_tile(image, _("_Restart"),
-+ _("Ends your session and restarts the computer."));
-+ g_signal_connect (G_OBJECT (tile), "clicked",
-+ G_CALLBACK (restart_button_clicked), logoutDlg);
-
-- /* XXX: Appending experimental display modal state */
-- {
-- Display *xdisplay = GDK_WINDOW_XDISPLAY (box->window);
-- Window xwindow = GDK_WINDOW_XID (box->window);
-- Atom state_atom, display_modal_atom;
--
-- state_atom = XInternAtom (xdisplay, "_NET_WM_STATE", 0);
-- display_modal_atom = XInternAtom (xdisplay,
-- "_NET_WM_STATE_DISPLAY_MODAL", 0);
--
-- XChangeProperty (xdisplay,
-- xwindow,
-- state_atom,
-- XA_ATOM, 32, PropModeAppend,
-- (guchar *) &display_modal_atom, 1);
-- }
-+ gtk_box_pack_start (GTK_BOX (vbox), tile, TRUE, TRUE, 0);
-+ gtk_widget_show_all(tile);
-+ }
-
-- if (!a11y_enabled)
-- {
-- /* Move the grabs to our message box */
-- gdk_pointer_grab (box->window, TRUE, 0,
-- NULL, NULL, GDK_CURRENT_TIME);
-- gdk_keyboard_grab (box->window, FALSE, GDK_CURRENT_TIME);
-- XSetInputFocus (GDK_DISPLAY (),
-- GDK_WINDOW_XWINDOW (box->window),
-- RevertToParent,
-- CurrentTime);
-- }
-
-- response = gtk_dialog_run (GTK_DIALOG (box));
-+ gtk_dialog_set_default_response (GTK_DIALOG (logoutDlg),
-+ GTK_RESPONSE_CANCEL);
+ response = gtk_dialog_run (GTK_DIALOG (box));
- if (halt)
- halt_active = GTK_TOGGLE_BUTTON (halt)->active;
-+ gsm_center_window_on_screen (GTK_WINDOW (logoutDlg), screen, monitor);
-
+-
- if (reboot)
- reboot_active = GTK_TOGGLE_BUTTON (reboot)->active;
-
+-
- if (suspend)
- suspend_active = GTK_TOGGLE_BUTTON (suspend)->active;
-
@@ -862,67 +495,14 @@
- selected_option = OPTION_SUSPEND;
- else
- selected_option = OPTION_LOGOUT;
-+ /* Grabbing the Xserver when accessibility is enabled will cause
-+ * a hang. See #93103 for details.
-+ */
-+ if (!a11y_enabled)
-+ {
-+ /* Really necessary?
-+ XGrabServer (GDK_DISPLAY ());
-+ */
-+ gsm_foreach_screen (fadeout_screen);
-+ }
+-
+ gtk_widget_destroy (box);
+ gtk_widget_destroy (invisible);
-- gtk_widget_destroy (box);
-- gtk_widget_destroy (invisible);
-+ gtk_widget_show_all (logoutDlg);
+@@ -558,62 +673,62 @@
+ }
-- if (!a11y_enabled)
-- {
-- hide_fadeout_windows ();
-- /* XUngrabServer (GDK_DISPLAY ()); */
-+ /* setup properties for window manager to special case the
-+ dialog (compiz does some awesome fading here) */
-+ {
-+ Display *xdisplay = GDK_WINDOW_XDISPLAY (logoutDlg->window);
-+ Window xwindow = GDK_WINDOW_XID (logoutDlg->window);
-+ Atom state_atom, display_modal_atom;
-+
-+ state_atom = XInternAtom (xdisplay, "_NET_WM_STATE", 0);
-+ display_modal_atom = XInternAtom (xdisplay,
-+ "_NET_WM_STATE_DISPLAY_MODAL", 0);
-+
-+ XChangeProperty (xdisplay,
-+ xwindow,
-+ state_atom,
-+ XA_ATOM, 32, PropModeAppend,
-+ (guchar *) &display_modal_atom, 1);
-+ }
-
-- gdk_pointer_ungrab (GDK_CURRENT_TIME);
-- gdk_keyboard_ungrab (GDK_CURRENT_TIME);
-+ if (!a11y_enabled)
-+ {
-+ // adds a callback to start the fading of all windows after
-+ // the primary display is captured and the logout dialog is
-+ // shown
-+ g_idle_add ((GSourceFunc) logout_dialog_callback, logoutDlg);
-+
-+ g_signal_connect (G_OBJECT(GTK_WIDGET(logoutDlg)), "configure-event",
-+ G_CALLBACK (logout_dialog_configure_cb),
-+ NULL);
-+
-+ g_signal_connect (G_OBJECT(GTK_WIDGET(logoutDlg)), "focus-out-event",
-+ G_CALLBACK (logout_dialog_focus_out_cb),
-+ NULL);
-+ }
-
-- gdk_flush ();
-- }
-+ do
-+ {
-
-- switch (response) {
+ switch (response) {
- case GTK_RESPONSE_OK:
- /* We want to know if we should trash changes (and lose forever)
- * or save them */
@@ -977,247 +557,64 @@
- retval = FALSE;
- break;
- }
-+ response = gtk_dialog_run (GTK_DIALOG (logoutDlg));
-+ showDialog = FALSE;
-+
-+ switch(response)
-+ {
-+ case GS_RESPONSE_LOGOUT:
-+ gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
-+ retval = TRUE;
-+// ssui_request_logout();
-+ break;
-+ case GS_RESPONSE_SHUTDOWN:
-+ gdm_set_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN);
-+ retval = TRUE;
-+// ssui_request_logout();
-+ break;
-+ case GS_RESPONSE_RESTART:
-+ gdm_set_logout_action (GDM_LOGOUT_ACTION_REBOOT);
-+ retval = TRUE;
-+// ssui_request_logout();
-+ break;
-+ case GS_RESPONSE_LOCK:
-+ g_spawn_command_line_async(
-+ "gnome-screensaver-command --lock", NULL);
-+ retval = FALSE;
-+ break;
-+ case GTK_RESPONSE_HELP:
-+ gnome_help_display_desktop_on_screen (NULL, "user-guide",
-+ "user-guide.xml",
-+ "gosgetstarted-73",
-+ screen,
-+ &error);
-+
-+ if (error)
-+ {
-+ GtkWidget *dialog;
-+
-+ dialog = gtk_message_dialog_new (NULL,
-+ GTK_DIALOG_DESTROY_WITH_PARENT,
-+ GTK_MESSAGE_ERROR,
-+ GTK_BUTTONS_CLOSE,
-+ ("There was an error displaying help: \n%s"),
-+ error->message);
-+
-+ g_signal_connect (G_OBJECT (dialog), "response",
-+ G_CALLBACK (gtk_widget_destroy),
-+ NULL);
-+
-+ gtk_window_set_screen (GTK_WINDOW (dialog), screen);
-+
-+ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
-+ gtk_widget_show (dialog);
-+ g_error_free (error);
-+ }
-+
-+ retval = FALSE;
-+ break;
-+ case GTK_RESPONSE_NONE:
-+ case GTK_RESPONSE_DELETE_EVENT:
-+ case GTK_RESPONSE_CANCEL:
-+ retval = FALSE;
-+ break;
-+ default:
-+ g_assert_not_reached();
-+ }
-+
-+ }while(showDialog);
-+
-+ gtk_widget_destroy (logoutDlg);
-+ gtk_widget_destroy (invisible);
-
+-
- gdm_set_logout_action (logout_action);
++ case GS_RESPONSE_LOGOUT:
++ gdm_set_logout_action (GDM_LOGOUT_ACTION_NONE);
++ retval = TRUE;
++ break;
++ case GS_RESPONSE_SHUTDOWN:
++ gdm_set_logout_action (GDM_LOGOUT_ACTION_SHUTDOWN);
++ retval = TRUE;
++ break;
++ case GS_RESPONSE_RESTART:
++ gdm_set_logout_action (GDM_LOGOUT_ACTION_REBOOT);
++ retval = TRUE;
++ break;
++ case GS_RESPONSE_LOCK:
++ g_spawn_command_line_async(
++ "gnome-screensaver-command --lock", NULL);
++ retval = FALSE;
++ break;
++ case GTK_RESPONSE_HELP:
++ gnome_help_display_desktop_on_screen (NULL, "user-guide",
++ "user-guide.xml",
++ "gosgetstarted-73",
++ screen,
++ &error);
++
++ if (error)
++ {
++ GtkWidget *dialog;
++
++ dialog = gtk_message_dialog_new (NULL,
++ GTK_DIALOG_DESTROY_WITH_PARENT,
++ GTK_MESSAGE_ERROR,
++ GTK_BUTTONS_CLOSE,
++ ("There was an error displaying help: \n%s"),
++ error->message);
++
++ g_signal_connect (G_OBJECT (dialog), "response",
++ G_CALLBACK (gtk_widget_destroy),
++ NULL);
++
++ gtk_window_set_screen (GTK_WINDOW (dialog), screen);
++
++ gtk_window_set_resizable (GTK_WINDOW (dialog), FALSE);
++ gtk_widget_show (dialog);
++ g_error_free (error);
++ }
++
++ retval = FALSE;
++ break;
++ case GTK_RESPONSE_NONE:
++ case GTK_RESPONSE_DELETE_EVENT:
++ case GTK_RESPONSE_CANCEL:
++ retval = FALSE;
++ break;
++ default:
++ g_assert_not_reached();
++ }
-- return retval;
-+ if (!a11y_enabled)
-+ {
-+ hide_fadeout_windows ();
-+ /* XUngrabServer (GDK_DISPLAY ()); */
-+
-+ gdk_flush ();
-+ }
-+
-+ return retval;
-+}
-+
-+static gboolean logout_dialog_callback (GtkWidget *dialog)
-+{
-+ XSetInputFocus (GDK_DISPLAY (),
-+ GDK_WINDOW_XWINDOW (dialog->window),
-+ RevertToParent,
-+ CurrentTime);
-+
-+ return FALSE;
-+}
-+
-+static gboolean logout_dialog_configure_cb( GtkWidget *widget,
-+ GdkEventConfigure *event,
-+ gpointer data)
-+{
-+ ssui_punch_hole_fadeout_windows(GTK_WINDOW(widget));
-+ return FALSE;
-+}
-+
-+static gboolean logout_dialog_focus_out_cb( GtkWidget *widget,
-+ GdkEventFocus *event,
-+ gpointer data)
-+{
-+ if(event->in == FALSE)
-+ {
-+ XSetInputFocus (GDK_DISPLAY (),
-+ GDK_WINDOW_XWINDOW (widget->window),
-+ RevertToParent,
-+ CurrentTime);
-+ }
-+
-+ return FALSE;
+ return retval;
}
-
-+
-+
- /* Display GUI if user wants it. Returns TRUE if save should
- continue, FALSE otherwise. */
- gboolean
-@@ -650,3 +852,121 @@
-
- return result;
- }
-+
-+
-+static void logout_button_clicked(GtkButton *button, gpointer user_data)
-+{
-+ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_LOGOUT);
-+}
-+
-+static void shutdown_button_clicked(GtkButton *button, gpointer user_data)
-+{
-+ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_SHUTDOWN);
-+}
-+
-+static void restart_button_clicked(GtkButton *button, gpointer user_data)
-+{
-+ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_RESTART);
-+}
-+
-+static void lock_button_clicked(GtkButton *button, gpointer user_data)
-+{
-+ gtk_dialog_response(GTK_DIALOG(user_data), GS_RESPONSE_LOCK);
-+}
-+
-+static GtkWidget *ssui_get_tile(GtkWidget *image, const gchar *title,
-+ const gchar *desc)
-+{
-+ GtkWidget *button;
-+ GtkWidget *alignment;
-+ GtkWidget *hbox;
-+ GtkWidget *vbox;
-+
-+ g_assert(title != NULL);
-+
-+ button = GTK_WIDGET(gtk_button_new());
-+ gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
-+// GTK_WIDGET_UNSET_FLAGS(button, GTK_HAS_FOCUS);
-+
-+ alignment = gtk_alignment_new(0, 0.5, 0, 0);
-+ gtk_alignment_set_padding(GTK_ALIGNMENT(alignment), 0, 0, 6, 6);
-+ gtk_container_add(GTK_CONTAINER(button), alignment);
-+
-+ hbox = gtk_hbox_new(FALSE, 12);
-+ gtk_container_add(GTK_CONTAINER(alignment), hbox);
-+ if(image != NULL)
-+ gtk_box_pack_start(GTK_BOX(hbox), image, FALSE, FALSE, 0);
-+
-+ vbox = gtk_vbox_new(FALSE, 2);
-+
-+ if(title != NULL)
-+ {
-+ gchar *full;
-+ GtkWidget *label;
-+
-+ full = g_strdup_printf ("%s", title);
-+ label = gtk_label_new(full);
-+ g_free (full);
-+
-+ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
-+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-+ gtk_label_set_use_underline(GTK_LABEL(label), TRUE);
-+
-+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-+ }
-+
-+ if(desc != NULL)
-+ {
-+ gchar *full;
-+ GtkWidget *label;
-+
-+ full = g_strdup_printf ("%s",
-+ desc);
-+ label = gtk_label_new(full);
-+ g_free (full);
-+
-+ gtk_label_set_use_markup (GTK_LABEL(label), TRUE);
-+ gtk_misc_set_alignment (GTK_MISC (label), 0.0, 0.5);
-+ gtk_label_set_use_underline(GTK_LABEL(label), TRUE);
-+ gtk_label_set_line_wrap(GTK_LABEL (label), TRUE);
-+
-+ gtk_box_pack_start(GTK_BOX(vbox), label, FALSE, FALSE, 0);
-+ }
-+
-+ gtk_box_pack_start(GTK_BOX(hbox), vbox, FALSE, FALSE, 0);
-+
-+ return button;
-+}
-+
-+
-+static void
-+window_get_frame_extents (GdkWindow *window, gint *left, gint *right,
-+ gint *top, gint *bottom)
-+{
-+ unsigned long *extents = NULL;
-+
-+ /* some guesses in case this fails to read */
-+ *left = 6;
-+ *right = 6;
-+ *top = 21;
-+ *bottom = 6;
-+
-+ /* Attempt to retrieve window's frame extents. */
-+ if (gdk_property_get (window,
-+ gdk_atom_intern ("_NET_FRAME_EXTENTS", FALSE),
-+ gdk_atom_intern ("CARDINAL", FALSE),
-+ 0,
-+ sizeof (unsigned long) * 4,
-+ FALSE,
-+ NULL,
-+ NULL,
-+ NULL,
-+ (guchar **)&extents))
-+ {
-+ *left = extents [0];
-+ *right = extents [1];
-+ *top = extents [2];
-+ *bottom = extents [3];
-+ }
-+}
-+
diff --git a/gnome-session.changes b/gnome-session.changes
index 7d69b24..6602ae4 100644
--- a/gnome-session.changes
+++ b/gnome-session.changes
@@ -1,3 +1,8 @@
+-------------------------------------------------------------------
+Fri Aug 3 03:44:59 CEST 2007 - cgaisford@suse.de
+
+- Fixed up the tile-ui patch to work with the new gnome
+
-------------------------------------------------------------------
Thu Aug 2 19:09:21 CEST 2007 - maw@suse.de
diff --git a/gnome-session.spec b/gnome-session.spec
index 7644020..c8b8bf9 100644
--- a/gnome-session.spec
+++ b/gnome-session.spec
@@ -16,7 +16,7 @@ BuildRequires: CASA-devel control-center2-devel gnome-common gnome-desktop-deve
License: GPL v2 or later, LGPL v2 or later
Group: System/GUI/GNOME
Version: 2.19.6
-Release: 1
+Release: 2
Summary: Session Tools for the GNOME 2.x Desktop
Source: %{name}-%{version}.tar.bz2
Source1: gnome
@@ -55,10 +55,8 @@ Patch9: gnome-session-dist-splash.patch
Patch10: gnome-session-compiz.patch
Patch11: gnome-session-migrate-session-manual.patch
Patch12: gnome-session-wm-switch.patch
-# FIXME: This doesn't apply. Somebody should go through it and
-# make it apply.
-Patch13: gnome-session-tile-ui.patch
-Patch14: gnome-session-no-devel-fatals.patch
+Patch13: gnome-session-no-devel-fatals.patch
+Patch14: gnome-session-tile-ui.patch
URL: http://www.gnome.org
BuildRoot: %{_tmppath}/%{name}-%{version}-build
Autoreqprov: on
@@ -103,8 +101,8 @@ gnome-patch-translation-prepare
%patch10
%patch11 -p1
%patch12
-# %patch13 -p1
-%patch14
+%patch13
+%patch14 -p1
%endif
gnome-patch-translation-update
@@ -155,6 +153,8 @@ rm -rf $RPM_BUILD_ROOT
%endif
%changelog
+* Fri Aug 03 2007 - cgaisford@suse.de
+- Fixed up the tile-ui patch to work with the new gnome
* Thu Aug 02 2007 - maw@suse.de
- Update to version 2.19.6:
+ Better fadeout animation for the logout dialogue when there is