]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcalendar.c
filechooser: Also convert get_uris() to returning native paths
[~andy/gtk] / gtk / gtkcalendar.c
index 345d7edaf3bdcf58a9f97cd224993d357a3832d5..cfceb08a1530698aec9c2ca9606e44b1229d2fd8 100644 (file)
@@ -18,8 +18,7 @@
  * Lesser General Public License for more details.
  *
  * You should have received a copy of the GNU Lesser General Public
- * License along with this library; if not, write to the Free
- * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.Free
  */
 
 /*
@@ -271,7 +270,7 @@ struct _GtkCalendarPrivate
   guint day_name_h;
   guint main_h;
 
-  guint arrow_state[4];
+  guint arrow_prelight : 4;
   guint arrow_width;
   guint max_month_width;
   guint max_year_width;
@@ -611,7 +610,7 @@ gtk_calendar_class_init (GtkCalendarClass *class)
 
 
   /**
-   * GtkCalendar:inner-border
+   * GtkCalendar:inner-border:
    *
    * The spacing around the day/week headers and main area.
    */
@@ -623,7 +622,7 @@ gtk_calendar_class_init (GtkCalendarClass *class)
                                                              GTK_PARAM_READABLE));
 
   /**
-   * GtkCalndar:vertical-separation
+   * GtkCalndar:vertical-separation:
    *
    * Separation between day headers and main area.
    */
@@ -635,7 +634,7 @@ gtk_calendar_class_init (GtkCalendarClass *class)
                                                              GTK_PARAM_READABLE));
 
   /**
-   * GtkCalendar:horizontal-separation
+   * GtkCalendar:horizontal-separation:
    *
    * Separation between week headers and main area.
    */
@@ -1594,11 +1593,9 @@ calendar_realize_arrows (GtkCalendar *calendar)
                                                &attributes,
                                                attributes_mask);
 
-          if (!gtk_widget_is_sensitive (widget))
-            priv->arrow_state[i] = GTK_STATE_FLAG_INSENSITIVE;
-
-          gdk_window_set_user_data (priv->arrow_win[i], widget);
+          gtk_widget_register_window (widget, priv->arrow_win[i]);
         }
+      priv->arrow_prelight = 0x0;
     }
   else
     {
@@ -1617,7 +1614,7 @@ calendar_unrealize_arrows (GtkCalendar *calendar)
     {
       if (priv->arrow_win[i])
         {
-          gdk_window_set_user_data (priv->arrow_win[i], NULL);
+          gtk_widget_unregister_window (GTK_WIDGET (calendar), priv->arrow_win[i]);
           gdk_window_destroy (priv->arrow_win[i]);
           priv->arrow_win[i] = NULL;
         }
@@ -1684,6 +1681,7 @@ gtk_calendar_realize (GtkWidget *widget)
   attributes.wclass = GDK_INPUT_ONLY;
   attributes.window_type = GDK_WINDOW_CHILD;
   attributes.event_mask = (gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK
+                           | GDK_SCROLL_MASK
                            | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK
                            | GDK_POINTER_MOTION_MASK | GDK_LEAVE_NOTIFY_MASK);
 
@@ -1706,7 +1704,7 @@ gtk_calendar_realize (GtkWidget *widget)
 
   priv->main_win = gdk_window_new (gtk_widget_get_window (widget),
                                    &attributes, attributes_mask);
-  gdk_window_set_user_data (priv->main_win, widget);
+  gtk_widget_register_window (widget, priv->main_win);
 
   calendar_realize_arrows (GTK_CALENDAR (widget));
 }
@@ -1720,7 +1718,7 @@ gtk_calendar_unrealize (GtkWidget *widget)
 
   if (priv->main_win)
     {
-      gdk_window_set_user_data (priv->main_win, NULL);
+      gtk_widget_unregister_window (widget, priv->main_win);
       gdk_window_destroy (priv->main_win);
       priv->main_win = NULL;
     }
@@ -2777,7 +2775,12 @@ calendar_paint_arrow (GtkCalendar *calendar,
   cairo_save (cr);
 
   context = gtk_widget_get_style_context (widget);
-  state = priv->arrow_state[arrow];
+  state = gtk_widget_get_state_flags (widget);
+
+  if (priv->arrow_prelight & (1 << arrow))
+    state |= GTK_STATE_FLAG_PRELIGHT;
+  else
+    state &= ~(GTK_STATE_FLAG_PRELIGHT);
 
   gtk_style_context_save (context);
   gtk_style_context_set_state (context, state);
@@ -2983,7 +2986,7 @@ calendar_main_button_press (GtkCalendar    *calendar,
       if (!gtk_widget_has_focus (widget))
         gtk_widget_grab_focus (widget);
 
-      if (event->button == 1)
+      if (event->button == GDK_BUTTON_PRIMARY)
         {
           priv->in_drag = 1;
           priv->drag_start_x = x;
@@ -3024,7 +3027,7 @@ gtk_calendar_button_press (GtkWidget      *widget,
           /* only call the action on single click, not double */
           if (event->type == GDK_BUTTON_PRESS)
             {
-              if (event->button == 1)
+              if (event->button == GDK_BUTTON_PRIMARY)
                 calendar_start_spinning (calendar, arrow);
 
               calendar_arrow_action (calendar, arrow);
@@ -3044,7 +3047,7 @@ gtk_calendar_button_release (GtkWidget    *widget,
   GtkCalendar *calendar = GTK_CALENDAR (widget);
   GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget);
 
-  if (event->button == 1)
+  if (event->button == GDK_BUTTON_PRIMARY)
     {
       calendar_stop_spinning (calendar);
 
@@ -3091,25 +3094,25 @@ gtk_calendar_enter_notify (GtkWidget        *widget,
 
   if (event->window == priv->arrow_win[ARROW_MONTH_LEFT])
     {
-      priv->arrow_state[ARROW_MONTH_LEFT] |= GTK_STATE_FLAG_PRELIGHT;
+      priv->arrow_prelight |= (1 << ARROW_MONTH_LEFT);
       calendar_invalidate_arrow (calendar, ARROW_MONTH_LEFT);
     }
 
   if (event->window == priv->arrow_win[ARROW_MONTH_RIGHT])
     {
-      priv->arrow_state[ARROW_MONTH_RIGHT] |= GTK_STATE_FLAG_PRELIGHT;
+      priv->arrow_prelight |= (1 << ARROW_MONTH_RIGHT);
       calendar_invalidate_arrow (calendar, ARROW_MONTH_RIGHT);
     }
 
   if (event->window == priv->arrow_win[ARROW_YEAR_LEFT])
     {
-      priv->arrow_state[ARROW_YEAR_LEFT] |= GTK_STATE_FLAG_PRELIGHT;
+      priv->arrow_prelight |= (1 << ARROW_YEAR_LEFT);
       calendar_invalidate_arrow (calendar, ARROW_YEAR_LEFT);
     }
 
   if (event->window == priv->arrow_win[ARROW_YEAR_RIGHT])
     {
-      priv->arrow_state[ARROW_YEAR_RIGHT] |= GTK_STATE_FLAG_PRELIGHT;
+      priv->arrow_prelight |= (1 << ARROW_YEAR_RIGHT);
       calendar_invalidate_arrow (calendar, ARROW_YEAR_RIGHT);
     }
 
@@ -3125,25 +3128,25 @@ gtk_calendar_leave_notify (GtkWidget        *widget,
 
   if (event->window == priv->arrow_win[ARROW_MONTH_LEFT])
     {
-      priv->arrow_state[ARROW_MONTH_LEFT] &= ~(GTK_STATE_FLAG_PRELIGHT);
+      priv->arrow_prelight &= ~(1 << ARROW_MONTH_LEFT);
       calendar_invalidate_arrow (calendar, ARROW_MONTH_LEFT);
     }
 
   if (event->window == priv->arrow_win[ARROW_MONTH_RIGHT])
     {
-      priv->arrow_state[ARROW_MONTH_RIGHT] &= ~(GTK_STATE_FLAG_PRELIGHT);
+      priv->arrow_prelight &= ~(1 << ARROW_MONTH_RIGHT);
       calendar_invalidate_arrow (calendar, ARROW_MONTH_RIGHT);
     }
 
   if (event->window == priv->arrow_win[ARROW_YEAR_LEFT])
     {
-      priv->arrow_state[ARROW_YEAR_LEFT] &= ~(GTK_STATE_FLAG_PRELIGHT);
+      priv->arrow_prelight &= ~(1 << ARROW_YEAR_LEFT);
       calendar_invalidate_arrow (calendar, ARROW_YEAR_LEFT);
     }
 
   if (event->window == priv->arrow_win[ARROW_YEAR_RIGHT])
     {
-      priv->arrow_state[ARROW_YEAR_RIGHT] &= ~(GTK_STATE_FLAG_PRELIGHT);
+      priv->arrow_prelight &= ~(1 << ARROW_YEAR_RIGHT);
       calendar_invalidate_arrow (calendar, ARROW_YEAR_RIGHT);
     }
 
@@ -3330,19 +3333,12 @@ gtk_calendar_state_flags_changed (GtkWidget     *widget,
 {
   GtkCalendar *calendar = GTK_CALENDAR (widget);
   GtkCalendarPrivate *priv = GTK_CALENDAR_GET_PRIVATE (widget);
-  int i;
 
   if (!gtk_widget_is_sensitive (widget))
     {
       priv->in_drag = 0;
       calendar_stop_spinning (calendar);
     }
-
-  for (i = 0; i < 4; i++)
-    if (gtk_widget_is_sensitive (widget))
-      priv->arrow_state[i] &= ~(GTK_STATE_FLAG_INSENSITIVE);
-    else
-      priv->arrow_state[i] |= GTK_STATE_FLAG_INSENSITIVE;
 }
 
 static void