~ucl-cs-study-devs/activityfinder/gtk+2.0-2.24.27

« back to all changes in this revision

Viewing changes to gdk/win32/gdkevents-win32.c

  • Committer: Package Import Robot
  • Author(s): Iain Lane
  • Date: 2015-02-20 17:48:37 UTC
  • mfrom: (1.14.27)
  • Revision ID: package-import@ubuntu.com-20150220174837-slkw5y3egvqijcyu
Tags: 2.24.26-0ubuntu1
* New upstream release.
  + Protect gdk_event_apply_filters_safe from changes in the filter list
  (LP: #1351890)
* Now need to build with --enable-man to build the manpages, and build-dep
  on libxml2-utils to get xmlcatalog which configure uses to decide whether
  to build them.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1069
1069
static GdkFilterReturn
1070
1070
apply_event_filters (GdkWindow  *window,
1071
1071
                     MSG        *msg,
1072
 
                     GList      *filters)
 
1072
                     GList      **filters)
1073
1073
{
1074
1074
  GdkFilterReturn result = GDK_FILTER_CONTINUE;
1075
1075
  GdkEvent *event;
1087
1087
   */
1088
1088
  node = _gdk_event_queue_append (_gdk_display, event);
1089
1089
  
1090
 
  tmp_list = filters;
 
1090
  tmp_list = *filters;
1091
1091
  while (tmp_list)
1092
1092
    {
1093
1093
      GdkEventFilter *filter = (GdkEventFilter *) tmp_list->data;
1094
 
      
 
1094
      GList *node;
 
1095
 
 
1096
      if ((filter->flags & GDK_EVENT_FILTER_REMOVED) != 0)
 
1097
        {
 
1098
          tmp_list = tmp_list->next;
 
1099
          continue;
 
1100
        }
 
1101
 
 
1102
      filter->ref_count++;
 
1103
      result = filter->function (msg, event, filter->data);
 
1104
 
 
1105
      /* get the next node after running the function since the
 
1106
         function may add or remove a next node */
 
1107
      node = tmp_list;
1095
1108
      tmp_list = tmp_list->next;
1096
 
      result = filter->function (msg, event, filter->data);
1097
 
      if (result !=  GDK_FILTER_CONTINUE)
1098
 
        break;
 
1109
 
 
1110
      filter->ref_count--;
 
1111
      if (filter->ref_count == 0)
 
1112
        {
 
1113
          *filters = g_list_remove_link (*filters, node);
 
1114
          g_list_free_1 (node);
 
1115
          g_free (filter);
 
1116
        }
 
1117
 
 
1118
      if (result != GDK_FILTER_CONTINUE)
 
1119
        break;
1099
1120
    }
1100
1121
 
1101
1122
  if (result == GDK_FILTER_CONTINUE || result == GDK_FILTER_REMOVE)
2075
2096
    {
2076
2097
      /* Apply global filters */
2077
2098
 
2078
 
      GdkFilterReturn result = apply_event_filters (NULL, msg, _gdk_default_filters);
 
2099
      GdkFilterReturn result = apply_event_filters (NULL, msg, &_gdk_default_filters);
2079
2100
      
2080
2101
      /* If result is GDK_FILTER_CONTINUE, we continue as if nothing
2081
2102
       * happened. If it is GDK_FILTER_REMOVE or GDK_FILTER_TRANSLATE,
2121
2142
    {
2122
2143
      /* Apply per-window filters */
2123
2144
 
2124
 
      GdkFilterReturn result = apply_event_filters (window, msg, ((GdkWindowObject *) window)->filters);
 
2145
      GdkFilterReturn result = apply_event_filters (window, msg, &((GdkWindowObject *) window)->filters);
2125
2146
 
2126
2147
      if (result == GDK_FILTER_REMOVE || result == GDK_FILTER_TRANSLATE)
2127
2148
        {