summaryrefslogtreecommitdiff
path: root/gdk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>1999-01-15 16:00:39 +0000
committerOwen Taylor <otaylor@src.gnome.org>1999-01-15 16:00:39 +0000
commit2e99e7713dc73ea5b7a000ab03b4d64176b9ad40 (patch)
treeb53b62d8cc9bf47aa3b9c77015a260eb8fe09b09 /gdk
parent3bba8439685024f9fbfd9d1880da95f4cd9ce09f (diff)
downloadgdk-pixbuf-2e99e7713dc73ea5b7a000ab03b4d64176b9ad40.tar.gz
nparams for selection_get should be 3, not 2. [ From Damon Chaplin
Fri Jan 15 10:22:21 1999 Owen Taylor <otaylor@redhat.com> * gtk/gtkwidget.c (gtk_widget_class_init): nparams for selection_get should be 3, not 2. [ From Damon Chaplin <damon@karuna.freeserve.co.uk> ] * gtk/gtkeventbox.c (gtk_event_box_paint): Add a paint routine so queued redraws work inside event boxes. Thu Jan 14 17:47:37 1999 Owen Taylor <otaylor@redhat.com> * gtk/gtkentry.c (gtk_entry_draw_cursor_on_drawable): Only redraw character under cursor when not displaying highlighted selection. * gdk/gdkrgb.c (gdk_rgb_init): Add in a cast to gpointer to make IRIX cc happy. Thu Jan 14 12:29:50 1999 Owen Taylor <otaylor@redhat.com> * gtk/gtkcheckbutton.c (gtk_check_button_draw): Restructure the drawing code to remove a bit of duplication - and to remove a call to gtk_widget_draw_focus() that queues a redraw when an expose occurs. * gtk/gtklabel.c (gtk_label_expose): Fix up handling of ypadding. * gtk/gtknotebook.c (gtk_notebook_draw): If we redraw the whole widget, also redraw the corresponding areas of the child widget. (have_visible_child still has some problems) * gdk/gdkpixmap.c: Change some g_new's to g_new0 so that fields unused for pixmaps get initialzized sanely. * gdk/gdk.h gdk/gdkwindow.c gdk/gdkprivate.h: Add new calls gdk_window_is_visible() and gdk_window_is_viewable() and a mapped flag to the window private structure. * gtk/gtkbin.c gtk/gtkclist.c gtk/gtkfixed.c gtk/gtkitem.c gtk/gtklayout.c gtk/gtklist.c gtk/gtkmenushell.c gtk/gtknotebook.c gtk/gtkpaned.c gtk/gtktree.c gtk/gtktreeitem.c gtk/gtkviewport.c: Map windows after mapping children. * gtk/gtkwidget.c (gtk_widget_clip_rect): Handle rectangles completely clipped away correctly. * gtk/gtkwidget.c (gtk_widget_idle_draw): Don't call gtk_widget_draw if width or height is 0. * gtk/gtkwidget.c (gtk_widget_idle_draw): Don't rely on GTK_REDRAW_PENDING after we've cleared it. (This was causing draw-combining to not happen at all). * gtk/gtkbin.c gtk/gtkscale.c: Remove uneccessary calls to gtk_widget_queue_draw() when mapping.
Diffstat (limited to 'gdk')
-rw-r--r--gdk/gdk.h9
-rw-r--r--gdk/gdkpixmap.c6
-rw-r--r--gdk/gdkprivate.h1
-rw-r--r--gdk/gdkrgb.c2
-rw-r--r--gdk/gdkwindow.c58
-rw-r--r--gdk/x11/gdkpixmap-x11.c6
-rw-r--r--gdk/x11/gdkwindow-x11.c58
7 files changed, 131 insertions, 9 deletions
diff --git a/gdk/gdk.h b/gdk/gdk.h
index a35f6e57b..e3030b3bc 100644
--- a/gdk/gdk.h
+++ b/gdk/gdk.h
@@ -219,6 +219,15 @@ void gdk_window_set_child_shapes (GdkWindow *window);
void gdk_window_merge_child_shapes (GdkWindow *window);
/*
+ * Check if a window has been shown, and whether all it's
+ * parents up to a toplevel have been shown, respectively.
+ * Note that a window that is_viewable below is not necessarily
+ * viewable in the X sense.
+ */
+gboolean gdk_window_is_visible (GdkWindow *window);
+gboolean gdk_window_is_viewable (GdkWindow *window);
+
+/*
* The following function adds a global filter for all client
* messages of type message_type
*/
diff --git a/gdk/gdkpixmap.c b/gdk/gdkpixmap.c
index f76e097d3..8df3145d7 100644
--- a/gdk/gdkpixmap.c
+++ b/gdk/gdkpixmap.c
@@ -64,7 +64,7 @@ gdk_pixmap_new (GdkWindow *window,
if (depth == -1)
depth = gdk_window_get_visual (window)->depth;
- private = g_new (GdkWindowPrivate, 1);
+ private = g_new0 (GdkWindowPrivate, 1);
pixmap = (GdkPixmap*) private;
private->xdisplay = window_private->xdisplay;
@@ -106,7 +106,7 @@ gdk_bitmap_create_from_data (GdkWindow *window,
if (window_private->destroyed)
return NULL;
- private = g_new (GdkWindowPrivate, 1);
+ private = g_new0 (GdkWindowPrivate, 1);
pixmap = (GdkPixmap*) private;
private->parent = NULL;
@@ -158,7 +158,7 @@ gdk_pixmap_create_from_data (GdkWindow *window,
if (depth == -1)
depth = gdk_window_get_visual (window)->depth;
- private = g_new (GdkWindowPrivate, 1);
+ private = g_new0 (GdkWindowPrivate, 1);
pixmap = (GdkPixmap*) private;
private->parent = NULL;
diff --git a/gdk/gdkprivate.h b/gdk/gdkprivate.h
index bc971a097..42b6a5ea4 100644
--- a/gdk/gdkprivate.h
+++ b/gdk/gdkprivate.h
@@ -63,6 +63,7 @@ struct _GdkWindowPrivate
guint8 window_type;
guint ref_count;
guint destroyed : 2;
+ guint mapped : 1;
gint extension_events;
diff --git a/gdk/gdkrgb.c b/gdk/gdkrgb.c
index 542e61d37..51c14399a 100644
--- a/gdk/gdkrgb.c
+++ b/gdk/gdkrgb.c
@@ -642,7 +642,7 @@ gdk_rgb_init (void)
if (image_info->bitmap)
/* Use malloc() instead of g_malloc since X will free() this mem */
static_image[i] = gdk_image_new_bitmap (image_info->visual,
- malloc (IMAGE_WIDTH * IMAGE_HEIGHT >> 3),
+ (gpointer) malloc (IMAGE_WIDTH * IMAGE_HEIGHT >> 3),
IMAGE_WIDTH, IMAGE_HEIGHT);
else
static_image[i] = gdk_image_new (GDK_IMAGE_FASTEST,
diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c
index b0931484b..56e8cdfb8 100644
--- a/gdk/gdkwindow.c
+++ b/gdk/gdkwindow.c
@@ -277,6 +277,7 @@ gdk_window_new (GdkWindow *parent,
private->xdisplay = parent_display;
private->destroyed = FALSE;
+ private->mapped = FALSE;
private->resize_count = 0;
private->ref_count = 1;
xattributes_mask = 0;
@@ -511,6 +512,7 @@ gdk_window_foreign_new (guint32 anid)
private->ref_count = 1;
private->window_type = GDK_WINDOW_FOREIGN;
private->destroyed = FALSE;
+ private->mapped = (attrs.map_state != IsUnmapped);
private->extension_events = 0;
private->colormap = NULL;
@@ -716,6 +718,7 @@ gdk_window_show (GdkWindow *window)
private = (GdkWindowPrivate*) window;
if (!private->destroyed)
{
+ private->mapped = TRUE;
XRaiseWindow (private->xdisplay, private->xwindow);
XMapWindow (private->xdisplay, private->xwindow);
}
@@ -730,7 +733,10 @@ gdk_window_hide (GdkWindow *window)
private = (GdkWindowPrivate*) window;
if (!private->destroyed)
- XUnmapWindow (private->xdisplay, private->xwindow);
+ {
+ private->mapped = FALSE;
+ XUnmapWindow (private->xdisplay, private->xwindow);
+ }
}
void
@@ -2470,6 +2476,55 @@ gdk_window_merge_child_shapes (GdkWindow *window)
#endif
}
+/*************************************************************
+ * gdk_window_is_visible:
+ * Check if the given window is mapped.
+ * arguments:
+ * window:
+ * results:
+ * is the window mapped
+ *************************************************************/
+
+gboolean
+gdk_window_is_visible (GdkWindow *window)
+{
+ GdkWindowPrivate *private = (GdkWindowPrivate *)window;
+
+ g_return_val_if_fail (window != NULL, FALSE);
+
+ return private->mapped;
+}
+
+/*************************************************************
+ * gdk_window_is_viewable:
+ * Check if the window and all ancestors of the window
+ * are mapped. (This is not necessarily "viewable" in
+ * the X sense, since we only check as far as we have
+ * GDK window parents, not to the root window)
+ * arguments:
+ * window:
+ * results:
+ * is the window viewable
+ *************************************************************/
+
+gboolean
+gdk_window_is_viewable (GdkWindow *window)
+{
+ GdkWindowPrivate *private = (GdkWindowPrivate *)window;
+
+ g_return_val_if_fail (window != NULL, FALSE);
+
+ while (private && (private != &gdk_root_parent))
+ {
+ if (!private->mapped)
+ return FALSE;
+
+ private = (GdkWindowPrivate *)private->parent;
+ }
+
+ return TRUE;
+}
+
void
gdk_drawable_set_data (GdkDrawable *drawable,
const gchar *key,
@@ -2479,3 +2534,4 @@ gdk_drawable_set_data (GdkDrawable *drawable,
g_dataset_set_data_full (drawable, key, data, destroy_func);
}
+
diff --git a/gdk/x11/gdkpixmap-x11.c b/gdk/x11/gdkpixmap-x11.c
index f76e097d3..8df3145d7 100644
--- a/gdk/x11/gdkpixmap-x11.c
+++ b/gdk/x11/gdkpixmap-x11.c
@@ -64,7 +64,7 @@ gdk_pixmap_new (GdkWindow *window,
if (depth == -1)
depth = gdk_window_get_visual (window)->depth;
- private = g_new (GdkWindowPrivate, 1);
+ private = g_new0 (GdkWindowPrivate, 1);
pixmap = (GdkPixmap*) private;
private->xdisplay = window_private->xdisplay;
@@ -106,7 +106,7 @@ gdk_bitmap_create_from_data (GdkWindow *window,
if (window_private->destroyed)
return NULL;
- private = g_new (GdkWindowPrivate, 1);
+ private = g_new0 (GdkWindowPrivate, 1);
pixmap = (GdkPixmap*) private;
private->parent = NULL;
@@ -158,7 +158,7 @@ gdk_pixmap_create_from_data (GdkWindow *window,
if (depth == -1)
depth = gdk_window_get_visual (window)->depth;
- private = g_new (GdkWindowPrivate, 1);
+ private = g_new0 (GdkWindowPrivate, 1);
pixmap = (GdkPixmap*) private;
private->parent = NULL;
diff --git a/gdk/x11/gdkwindow-x11.c b/gdk/x11/gdkwindow-x11.c
index b0931484b..56e8cdfb8 100644
--- a/gdk/x11/gdkwindow-x11.c
+++ b/gdk/x11/gdkwindow-x11.c
@@ -277,6 +277,7 @@ gdk_window_new (GdkWindow *parent,
private->xdisplay = parent_display;
private->destroyed = FALSE;
+ private->mapped = FALSE;
private->resize_count = 0;
private->ref_count = 1;
xattributes_mask = 0;
@@ -511,6 +512,7 @@ gdk_window_foreign_new (guint32 anid)
private->ref_count = 1;
private->window_type = GDK_WINDOW_FOREIGN;
private->destroyed = FALSE;
+ private->mapped = (attrs.map_state != IsUnmapped);
private->extension_events = 0;
private->colormap = NULL;
@@ -716,6 +718,7 @@ gdk_window_show (GdkWindow *window)
private = (GdkWindowPrivate*) window;
if (!private->destroyed)
{
+ private->mapped = TRUE;
XRaiseWindow (private->xdisplay, private->xwindow);
XMapWindow (private->xdisplay, private->xwindow);
}
@@ -730,7 +733,10 @@ gdk_window_hide (GdkWindow *window)
private = (GdkWindowPrivate*) window;
if (!private->destroyed)
- XUnmapWindow (private->xdisplay, private->xwindow);
+ {
+ private->mapped = FALSE;
+ XUnmapWindow (private->xdisplay, private->xwindow);
+ }
}
void
@@ -2470,6 +2476,55 @@ gdk_window_merge_child_shapes (GdkWindow *window)
#endif
}
+/*************************************************************
+ * gdk_window_is_visible:
+ * Check if the given window is mapped.
+ * arguments:
+ * window:
+ * results:
+ * is the window mapped
+ *************************************************************/
+
+gboolean
+gdk_window_is_visible (GdkWindow *window)
+{
+ GdkWindowPrivate *private = (GdkWindowPrivate *)window;
+
+ g_return_val_if_fail (window != NULL, FALSE);
+
+ return private->mapped;
+}
+
+/*************************************************************
+ * gdk_window_is_viewable:
+ * Check if the window and all ancestors of the window
+ * are mapped. (This is not necessarily "viewable" in
+ * the X sense, since we only check as far as we have
+ * GDK window parents, not to the root window)
+ * arguments:
+ * window:
+ * results:
+ * is the window viewable
+ *************************************************************/
+
+gboolean
+gdk_window_is_viewable (GdkWindow *window)
+{
+ GdkWindowPrivate *private = (GdkWindowPrivate *)window;
+
+ g_return_val_if_fail (window != NULL, FALSE);
+
+ while (private && (private != &gdk_root_parent))
+ {
+ if (!private->mapped)
+ return FALSE;
+
+ private = (GdkWindowPrivate *)private->parent;
+ }
+
+ return TRUE;
+}
+
void
gdk_drawable_set_data (GdkDrawable *drawable,
const gchar *key,
@@ -2479,3 +2534,4 @@ gdk_drawable_set_data (GdkDrawable *drawable,
g_dataset_set_data_full (drawable, key, data, destroy_func);
}
+