diff options
author | Owen Taylor <owt1@cornell.edu> | 1998-04-14 01:39:40 +0000 |
---|---|---|
committer | Owen Taylor <otaylor@src.gnome.org> | 1998-04-14 01:39:40 +0000 |
commit | 385164d6f9c34a456667f90a8e7a98782871f08f (patch) | |
tree | 5c637d8fb96a5b3d26d5b14eb0d88e3e7788ed04 | |
parent | 1bafe5a8e7e247cb1550070b3a725acd3b1f556d (diff) | |
download | gdk-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-- | ChangeLog | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-0 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-2 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-4 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-6 | 14 | ||||
-rw-r--r-- | ChangeLog.pre-2-8 | 14 | ||||
-rw-r--r-- | gdk/gdk.c | 45 | ||||
-rw-r--r-- | gdk/x11/gdkmain-x11.c | 45 | ||||
-rw-r--r-- | gtk/gtkrange.c | 24 | ||||
-rw-r--r-- | gtk/gtktext.c | 10 |
11 files changed, 180 insertions, 42 deletions
@@ -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. @@ -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') { |