summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOwen Taylor <owt1@cornell.edu>1998-04-14 01:39:40 +0000
committerOwen Taylor <otaylor@src.gnome.org>1998-04-14 01:39:40 +0000
commit385164d6f9c34a456667f90a8e7a98782871f08f (patch)
tree5c637d8fb96a5b3d26d5b14eb0d88e3e7788ed04
parent1bafe5a8e7e247cb1550070b3a725acd3b1f556d (diff)
downloadgdk-pixbuf-385164d6f9c34a456667f90a8e7a98782871f08f.tar.gz
Don't read the character past the end of the text.
Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu> * gtk/gtktext.c (find_char_width): Don't read the character past the end of the text. * gtk/gtkrange.c (gtk_real_range_timer): If the mouse button has been released before the timer is activated, don't keep on scrolling. * gdk/gdk.c (gdk_event_translate): Filter subsequent configure events after we discard the first. Removed obsolete and sometimes very slow GdkOtherEvent. (Left in gdktypes.h with signal in GTK)
-rw-r--r--ChangeLog14
-rw-r--r--ChangeLog.pre-2-014
-rw-r--r--ChangeLog.pre-2-1014
-rw-r--r--ChangeLog.pre-2-214
-rw-r--r--ChangeLog.pre-2-414
-rw-r--r--ChangeLog.pre-2-614
-rw-r--r--ChangeLog.pre-2-814
-rw-r--r--gdk/gdk.c45
-rw-r--r--gdk/x11/gdkmain-x11.c45
-rw-r--r--gtk/gtkrange.c24
-rw-r--r--gtk/gtktext.c10
11 files changed, 180 insertions, 42 deletions
diff --git a/ChangeLog b/ChangeLog
index c9ddfb731..f268c727d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,17 @@
+Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu>
+
+ * gtk/gtktext.c (find_char_width): Don't read the
+ character past the end of the text.
+
+ * gtk/gtkrange.c (gtk_real_range_timer): If the mouse
+ button has been released before the timer is activated,
+ don't keep on scrolling.
+
+ * gdk/gdk.c (gdk_event_translate): Filter subsequent configure
+ events after we discard the first. Removed obsolete and
+ sometimes very slow GdkOtherEvent. (Left in gdktypes.h
+ with signal in GTK)
+
Mon Apr 13 18:03:54 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
* README: update address info to gtk.org for ftp and web sites.
diff --git a/ChangeLog.pre-2-0 b/ChangeLog.pre-2-0
index c9ddfb731..f268c727d 100644
--- a/ChangeLog.pre-2-0
+++ b/ChangeLog.pre-2-0
@@ -1,3 +1,17 @@
+Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu>
+
+ * gtk/gtktext.c (find_char_width): Don't read the
+ character past the end of the text.
+
+ * gtk/gtkrange.c (gtk_real_range_timer): If the mouse
+ button has been released before the timer is activated,
+ don't keep on scrolling.
+
+ * gdk/gdk.c (gdk_event_translate): Filter subsequent configure
+ events after we discard the first. Removed obsolete and
+ sometimes very slow GdkOtherEvent. (Left in gdktypes.h
+ with signal in GTK)
+
Mon Apr 13 18:03:54 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
* README: update address info to gtk.org for ftp and web sites.
diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10
index c9ddfb731..f268c727d 100644
--- a/ChangeLog.pre-2-10
+++ b/ChangeLog.pre-2-10
@@ -1,3 +1,17 @@
+Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu>
+
+ * gtk/gtktext.c (find_char_width): Don't read the
+ character past the end of the text.
+
+ * gtk/gtkrange.c (gtk_real_range_timer): If the mouse
+ button has been released before the timer is activated,
+ don't keep on scrolling.
+
+ * gdk/gdk.c (gdk_event_translate): Filter subsequent configure
+ events after we discard the first. Removed obsolete and
+ sometimes very slow GdkOtherEvent. (Left in gdktypes.h
+ with signal in GTK)
+
Mon Apr 13 18:03:54 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
* README: update address info to gtk.org for ftp and web sites.
diff --git a/ChangeLog.pre-2-2 b/ChangeLog.pre-2-2
index c9ddfb731..f268c727d 100644
--- a/ChangeLog.pre-2-2
+++ b/ChangeLog.pre-2-2
@@ -1,3 +1,17 @@
+Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu>
+
+ * gtk/gtktext.c (find_char_width): Don't read the
+ character past the end of the text.
+
+ * gtk/gtkrange.c (gtk_real_range_timer): If the mouse
+ button has been released before the timer is activated,
+ don't keep on scrolling.
+
+ * gdk/gdk.c (gdk_event_translate): Filter subsequent configure
+ events after we discard the first. Removed obsolete and
+ sometimes very slow GdkOtherEvent. (Left in gdktypes.h
+ with signal in GTK)
+
Mon Apr 13 18:03:54 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
* README: update address info to gtk.org for ftp and web sites.
diff --git a/ChangeLog.pre-2-4 b/ChangeLog.pre-2-4
index c9ddfb731..f268c727d 100644
--- a/ChangeLog.pre-2-4
+++ b/ChangeLog.pre-2-4
@@ -1,3 +1,17 @@
+Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu>
+
+ * gtk/gtktext.c (find_char_width): Don't read the
+ character past the end of the text.
+
+ * gtk/gtkrange.c (gtk_real_range_timer): If the mouse
+ button has been released before the timer is activated,
+ don't keep on scrolling.
+
+ * gdk/gdk.c (gdk_event_translate): Filter subsequent configure
+ events after we discard the first. Removed obsolete and
+ sometimes very slow GdkOtherEvent. (Left in gdktypes.h
+ with signal in GTK)
+
Mon Apr 13 18:03:54 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
* README: update address info to gtk.org for ftp and web sites.
diff --git a/ChangeLog.pre-2-6 b/ChangeLog.pre-2-6
index c9ddfb731..f268c727d 100644
--- a/ChangeLog.pre-2-6
+++ b/ChangeLog.pre-2-6
@@ -1,3 +1,17 @@
+Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu>
+
+ * gtk/gtktext.c (find_char_width): Don't read the
+ character past the end of the text.
+
+ * gtk/gtkrange.c (gtk_real_range_timer): If the mouse
+ button has been released before the timer is activated,
+ don't keep on scrolling.
+
+ * gdk/gdk.c (gdk_event_translate): Filter subsequent configure
+ events after we discard the first. Removed obsolete and
+ sometimes very slow GdkOtherEvent. (Left in gdktypes.h
+ with signal in GTK)
+
Mon Apr 13 18:03:54 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
* README: update address info to gtk.org for ftp and web sites.
diff --git a/ChangeLog.pre-2-8 b/ChangeLog.pre-2-8
index c9ddfb731..f268c727d 100644
--- a/ChangeLog.pre-2-8
+++ b/ChangeLog.pre-2-8
@@ -1,3 +1,17 @@
+Mon Apr 13 21:40:14 1998 Owen Taylor <owt1@cornell.edu>
+
+ * gtk/gtktext.c (find_char_width): Don't read the
+ character past the end of the text.
+
+ * gtk/gtkrange.c (gtk_real_range_timer): If the mouse
+ button has been released before the timer is activated,
+ don't keep on scrolling.
+
+ * gdk/gdk.c (gdk_event_translate): Filter subsequent configure
+ events after we discard the first. Removed obsolete and
+ sometimes very slow GdkOtherEvent. (Left in gdktypes.h
+ with signal in GTK)
+
Mon Apr 13 18:03:54 PDT 1998 Shawn T. Amundson <amundson@gtk.org>
* README: update address info to gtk.org for ftp and web sites.
diff --git a/gdk/gdk.c b/gdk/gdk.c
index b1ccb631d..b2cdb5d2d 100644
--- a/gdk/gdk.c
+++ b/gdk/gdk.c
@@ -223,9 +223,6 @@ static GList* xim_ic_list;
#endif
-#define OTHER_XEVENT_BUFSIZE 4
-static XEvent other_xevent[OTHER_XEVENT_BUFSIZE]; /* XEvents passed along to user */
-static int other_xevent_i = 0;
static GList *putback_events = NULL;
static gulong base_id;
@@ -2546,10 +2543,30 @@ gdk_event_translate (GdkEvent *event,
while ((XPending (gdk_display) > 0) &&
XCheckTypedWindowEvent(gdk_display, xevent->xany.window,
ConfigureNotify, xevent))
- GDK_NOTE (EVENTS,
- g_print ("configure notify discarded:\twindow: %ld\n",
- xevent->xconfigure.window - base_id));
- /*XSync (gdk_display, 0);*/
+ {
+ GdkFilterReturn result;
+
+ GDK_NOTE (EVENTS,
+ g_print ("configure notify discarded:\twindow: %ld\n",
+ xevent->xconfigure.window - base_id));
+
+ result = gdk_event_apply_filters (xevent, event,
+ window_private
+ ?window_private->filters
+ :gdk_default_filters);
+
+ /* If the result is GDK_FILTER_REMOVE, there will be
+ * trouble, but anybody who filtering the Configure events
+ * better know what they are doing
+ */
+ if (result != GDK_FILTER_CONTINUE)
+ {
+ return (result == GDK_FILTER_TRANSLATE) ? TRUE : FALSE;
+ }
+
+ /*XSync (gdk_display, 0);*/
+ }
+
GDK_NOTE (EVENTS,
g_print ("configure notify:\twindow: %ld x,y: %d %d w,h: %d %d b-w: %d above: %ld ovr: %d\n",
@@ -2931,19 +2948,9 @@ gdk_event_translate (GdkEvent *event,
gdk_input_vtable.other_event)
return_val = gdk_input_vtable.other_event(event, xevent, window);
else
- return_val = -1;
+ return_val = FALSE;
- if (return_val < 0) /* not an XInput event, convert */
- {
- event->other.type = GDK_OTHER_EVENT;
- event->other.window = window;
- event->other.xevent = (GdkXEvent *)&other_xevent[other_xevent_i];
- memcpy (&other_xevent[other_xevent_i], xevent, sizeof (XEvent));
- other_xevent_i = (other_xevent_i+1) % OTHER_XEVENT_BUFSIZE;
- return_val = TRUE;
- }
- else
- return_val = return_val && !window_private->destroyed;
+ return_val = return_val && !window_private->destroyed;
break;
}
diff --git a/gdk/x11/gdkmain-x11.c b/gdk/x11/gdkmain-x11.c
index b1ccb631d..b2cdb5d2d 100644
--- a/gdk/x11/gdkmain-x11.c
+++ b/gdk/x11/gdkmain-x11.c
@@ -223,9 +223,6 @@ static GList* xim_ic_list;
#endif
-#define OTHER_XEVENT_BUFSIZE 4
-static XEvent other_xevent[OTHER_XEVENT_BUFSIZE]; /* XEvents passed along to user */
-static int other_xevent_i = 0;
static GList *putback_events = NULL;
static gulong base_id;
@@ -2546,10 +2543,30 @@ gdk_event_translate (GdkEvent *event,
while ((XPending (gdk_display) > 0) &&
XCheckTypedWindowEvent(gdk_display, xevent->xany.window,
ConfigureNotify, xevent))
- GDK_NOTE (EVENTS,
- g_print ("configure notify discarded:\twindow: %ld\n",
- xevent->xconfigure.window - base_id));
- /*XSync (gdk_display, 0);*/
+ {
+ GdkFilterReturn result;
+
+ GDK_NOTE (EVENTS,
+ g_print ("configure notify discarded:\twindow: %ld\n",
+ xevent->xconfigure.window - base_id));
+
+ result = gdk_event_apply_filters (xevent, event,
+ window_private
+ ?window_private->filters
+ :gdk_default_filters);
+
+ /* If the result is GDK_FILTER_REMOVE, there will be
+ * trouble, but anybody who filtering the Configure events
+ * better know what they are doing
+ */
+ if (result != GDK_FILTER_CONTINUE)
+ {
+ return (result == GDK_FILTER_TRANSLATE) ? TRUE : FALSE;
+ }
+
+ /*XSync (gdk_display, 0);*/
+ }
+
GDK_NOTE (EVENTS,
g_print ("configure notify:\twindow: %ld x,y: %d %d w,h: %d %d b-w: %d above: %ld ovr: %d\n",
@@ -2931,19 +2948,9 @@ gdk_event_translate (GdkEvent *event,
gdk_input_vtable.other_event)
return_val = gdk_input_vtable.other_event(event, xevent, window);
else
- return_val = -1;
+ return_val = FALSE;
- if (return_val < 0) /* not an XInput event, convert */
- {
- event->other.type = GDK_OTHER_EVENT;
- event->other.window = window;
- event->other.xevent = (GdkXEvent *)&other_xevent[other_xevent_i];
- memcpy (&other_xevent[other_xevent_i], xevent, sizeof (XEvent));
- other_xevent_i = (other_xevent_i+1) % OTHER_XEVENT_BUFSIZE;
- return_val = TRUE;
- }
- else
- return_val = return_val && !window_private->destroyed;
+ return_val = return_val && !window_private->destroyed;
break;
}
diff --git a/gtk/gtkrange.c b/gtk/gtkrange.c
index 036422754..a4c50e067 100644
--- a/gtk/gtkrange.c
+++ b/gtk/gtkrange.c
@@ -1165,6 +1165,8 @@ gtk_real_range_timer (GtkRange *range)
}
else
{
+ GdkModifierType mods, mask;
+
if (!range->timer)
{
return_val = FALSE;
@@ -1177,8 +1179,26 @@ gtk_real_range_timer (GtkRange *range)
range->need_timer = FALSE;
}
- if (gtk_range_scroll (range, -1))
- return return_val;
+ switch (range->button)
+ {
+ case 1:
+ mask = GDK_BUTTON1_MASK;
+ break;
+ case 2:
+ mask = GDK_BUTTON2_MASK;
+ break;
+ case 3:
+ mask = GDK_BUTTON3_MASK;
+ break;
+ default:
+ mask = 0;
+ break;
+ }
+
+ gdk_window_get_pointer (range->slider, NULL, NULL, &mods);
+
+ if (mods & mask)
+ return_val = gtk_range_scroll (range, -1);
}
return return_val;
diff --git a/gtk/gtktext.c b/gtk/gtktext.c
index 0fea242c5..7d9e86077 100644
--- a/gtk/gtktext.c
+++ b/gtk/gtktext.c
@@ -2972,8 +2972,14 @@ pixel_height_of (GtkText* text, GList* cache_line)
static gint
find_char_width (GtkText* text, const GtkPropertyMark *mark, const TabStopMark *tab_mark)
{
- gchar ch = GTK_TEXT_INDEX (text, mark->index);
- gint16* char_widths = MARK_CURRENT_TEXT_FONT (mark)->char_widths;
+ gchar ch;
+ gint16* char_widths;
+
+ if (LAST_INDEX (text, *mark))
+ return 0;
+
+ ch = GTK_TEXT_INDEX (text, mark->index);
+ char_widths = MARK_CURRENT_TEXT_FONT (mark)->char_widths;
if (ch == '\t')
{