gnome-screensaver r1444 - in trunk: . src
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-screensaver r1444 - in trunk: . src
- Date: Tue, 13 May 2008 00:29:05 +0100 (BST)
Author: mccann
Date: Mon May 12 23:29:05 2008
New Revision: 1444
URL: http://svn.gnome.org/viewvc/gnome-screensaver?rev=1444&view=rev
Log:
2008-05-12 William Jon McCann <jmccann redhat com>
* src/gs-manager.c (manager_show_window):
* src/gs-window-x11.c (force_no_pixmap_background),
(widget_clear_all_children),
(gs_window_clear_to_background_pixmap), (clear_widget),
(gs_window_clear), (gs_window_get_drawing_area),
(lock_command_watch), (popup_dialog_idle), (gs_window_init):
* src/gs-window.h:
Add a new child widget to use for savers to draw on. We
hide this widget entirely when popping up the unlock dialog.
This avoids interference between the background styles.
Modified:
trunk/ChangeLog
trunk/src/gs-manager.c
trunk/src/gs-window-x11.c
trunk/src/gs-window.h
Modified: trunk/src/gs-manager.c
==============================================================================
--- trunk/src/gs-manager.c (original)
+++ trunk/src/gs-manager.c Mon May 12 23:29:05 2008
@@ -1351,7 +1351,7 @@
apply_background_to_window (manager, window);
- job = gs_job_new_for_widget (GTK_WIDGET (window));
+ job = gs_job_new_for_widget (gs_window_get_drawing_area (window));
manager_select_theme_for_job (manager, job);
manager_add_job_for_window (manager, window, job);
Modified: trunk/src/gs-window-x11.c
==============================================================================
--- trunk/src/gs-window-x11.c (original)
+++ trunk/src/gs-window-x11.c Mon May 12 23:29:05 2008
@@ -73,6 +73,7 @@
char *away_message;
GtkWidget *vbox;
+ GtkWidget *drawing_area;
GtkWidget *lock_box;
GtkWidget *lock_socket;
GtkWidget *keyboard_socket;
@@ -204,12 +205,12 @@
" bg[ACTIVE] = { 0.0, 0.0, 0.0 }\n"
" bg[PRELIGHT] = { 0.0, 0.0, 0.0 }\n"
" }\n"
- " widget \"gs-window*\" style : highest \"gs-theme-engine-style\"\n"
+ " widget \"gs-window-drawing-area*\" style : highest \"gs-theme-engine-style\"\n"
"\n");
first_time = FALSE;
}
- gtk_widget_set_name (widget, "gs-window");
+ gtk_widget_set_name (widget, "gs-window-drawing-area");
}
static void
@@ -246,7 +247,7 @@
}
static void
-clear_all_children (GSWindow *window)
+widget_clear_all_children (GtkWidget *widget)
{
GdkWindow *w;
@@ -254,11 +255,11 @@
gdk_error_trap_push ();
- w = GTK_WIDGET (window)->window;
+ w = widget->window;
clear_children (GDK_WINDOW_XID (w));
- gdk_display_sync (gtk_widget_get_display (GTK_WIDGET (window)));
+ gdk_display_sync (gtk_widget_get_display (widget));
gdk_error_trap_pop ();
}
@@ -280,7 +281,7 @@
}
}
-void
+static void
gs_window_clear_to_background_pixmap (GSWindow *window)
{
GtkStateType state;
@@ -323,38 +324,33 @@
gdk_window_clear (GTK_WIDGET (window)->window);
- /* If a screensaver theme adds child windows we need to clear them too */
- clear_all_children (window);
-
gdk_flush ();
}
-void
-gs_window_clear (GSWindow *window)
+static void
+clear_widget (GtkWidget *widget)
{
GdkColor color = { 0, 0x0000, 0x0000, 0x0000 };
GdkColormap *colormap;
GtkStateType state;
GtkStyle *style;
- g_return_if_fail (GS_IS_WINDOW (window));
-
- if (! GTK_WIDGET_VISIBLE (GTK_WIDGET (window))) {
+ if (! GTK_WIDGET_VISIBLE (widget)) {
return;
}
- gs_debug ("Clearing window");
+ gs_debug ("Clearing widget");
state = (GtkStateType) 0;
- while (state < (GtkStateType) G_N_ELEMENTS (GTK_WIDGET (window)->style->bg)) {
- gtk_widget_modify_bg (GTK_WIDGET (window), state, &color);
+ while (state < (GtkStateType) G_N_ELEMENTS (widget->style->bg)) {
+ gtk_widget_modify_bg (widget, state, &color);
state++;
}
- style = gtk_style_copy (GTK_WIDGET (window)->style);
+ style = gtk_style_copy (widget->style);
state = (GtkStateType) 0;
- while (state < (GtkStateType) G_N_ELEMENTS (GTK_WIDGET (window)->style->bg_pixmap)) {
+ while (state < (GtkStateType) G_N_ELEMENTS (widget->style->bg_pixmap)) {
if (style->bg_pixmap[state] != NULL) {
g_object_unref (style->bg_pixmap[state]);
@@ -364,21 +360,30 @@
state++;
}
- colormap = gdk_drawable_get_colormap (GTK_WIDGET (window)->window);
+ colormap = gdk_drawable_get_colormap (widget->window);
gdk_colormap_alloc_color (colormap, &color, FALSE, TRUE);
- gdk_window_set_background (GTK_WIDGET (window)->window, &color);
+ gdk_window_set_background (widget->window, &color);
- gtk_widget_set_style (GTK_WIDGET (window), style);
+ gtk_widget_set_style (widget, style);
g_object_unref (style);
- gdk_window_clear (GTK_WIDGET (window)->window);
+ gdk_window_clear (widget->window);
/* If a screensaver theme adds child windows we need to clear them too */
- clear_all_children (window);
+ widget_clear_all_children (widget);
gdk_flush ();
}
+void
+gs_window_clear (GSWindow *window)
+{
+ g_return_if_fail (GS_IS_WINDOW (window));
+
+ clear_widget (GTK_WIDGET (window));
+ clear_widget (window->priv->drawing_area);
+}
+
static GdkRegion *
get_outside_region (GSWindow *window)
{
@@ -909,6 +914,14 @@
return GTK_WIDGET (window)->window;
}
+GtkWidget *
+gs_window_get_drawing_area (GSWindow *window)
+{
+ g_return_val_if_fail (GS_IS_WINDOW (window), NULL);
+
+ return window->priv->drawing_area;
+}
+
/* just for debugging */
static gboolean
error_watch (GIOChannel *source,
@@ -1446,6 +1459,8 @@
add_emit_deactivated_idle (window);
}
+ gtk_widget_show (window->priv->drawing_area);
+
gs_window_clear (window);
set_invisible_cursor (GTK_WIDGET (window)->window, TRUE);
g_signal_emit (window, signals [DIALOG_DOWN], 0);
@@ -1524,6 +1539,8 @@
command = g_string_append (command, " --verbose");
}
+ gtk_widget_hide (window->priv->drawing_area);
+
gs_window_clear_to_background_pixmap (window);
set_invisible_cursor (GTK_WIDGET (window)->window, FALSE);
@@ -2208,11 +2225,16 @@
| GDK_VISIBILITY_NOTIFY_MASK
| GDK_ENTER_NOTIFY_MASK
| GDK_LEAVE_NOTIFY_MASK);
- /*force_no_pixmap_background (GTK_WIDGET (window));*/
window->priv->vbox = gtk_vbox_new (FALSE, 12);
gtk_widget_show (window->priv->vbox);
gtk_container_add (GTK_CONTAINER (window), window->priv->vbox);
+
+ window->priv->drawing_area = gtk_drawing_area_new ();
+ gtk_widget_show (window->priv->drawing_area);
+ gtk_box_pack_start (GTK_BOX (window->priv->vbox), window->priv->drawing_area, TRUE, TRUE, 0);
+
+ force_no_pixmap_background (window->priv->drawing_area);
}
static void
Modified: trunk/src/gs-window.h
==============================================================================
--- trunk/src/gs-window.h (original)
+++ trunk/src/gs-window.h Mon May 12 23:29:05 2008
@@ -93,8 +93,8 @@
void gs_window_show (GSWindow *window);
void gs_window_destroy (GSWindow *window);
GdkWindow * gs_window_get_gdk_window (GSWindow *window);
+GtkWidget * gs_window_get_drawing_area (GSWindow *window);
void gs_window_clear (GSWindow *window);
-void gs_window_clear_to_background_pixmap (GSWindow *window);
G_END_DECLS
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]