]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkradiobutton.c
filechooserbutton: Duh, remove all the timeouts after tests
[~andy/gtk] / gtk / gtkradiobutton.c
index 590a085e5444cb0a32b74198e80e2f2559f07a43..82ab28cb9da467ae73eac8844675c8daffc136ce 100644 (file)
@@ -12,9 +12,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., 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
  */
 
 /*
@@ -33,6 +31,7 @@
 #include "gtkmarshalers.h"
 #include "gtkprivate.h"
 #include "gtkintl.h"
+#include "a11y/gtkradiobuttonaccessible.h"
 
 /**
  * SECTION:gtkradiobutton
@@ -76,7 +75,8 @@
  *
  *    GtkWidget *window, *radio1, *radio2, *box, *entry;
  *    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
- *    box = gtk_box_new (GTK_ORIENTATION_VERTICAL, TRUE, 2);
+ *    box = gtk_box_new (GTK_ORIENTATION_VERTICAL, 2);
+ *    gtk_box_set_homogeneous (GTK_BOX (box), TRUE);
  *
  *    /&ast; Create a radio button with a GtkEntry widget &ast;/
  *    radio1 = gtk_radio_button_new (NULL);
@@ -195,6 +195,8 @@ gtk_radio_button_class_init (GtkRadioButtonClass *class)
                                       G_TYPE_NONE, 0);
 
   g_type_class_add_private (class, sizeof (GtkRadioButtonPrivate));
+
+  gtk_widget_class_set_accessible_type (widget_class, GTK_TYPE_RADIO_BUTTON_ACCESSIBLE);
 }
 
 static void
@@ -207,7 +209,6 @@ gtk_radio_button_init (GtkRadioButton *radio_button)
                                                     GtkRadioButtonPrivate);
   priv = radio_button->priv;
 
-  gtk_widget_set_has_window (GTK_WIDGET (radio_button), FALSE);
   gtk_widget_set_receives_default (GTK_WIDGET (radio_button), FALSE);
 
   _gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (radio_button), TRUE);
@@ -481,7 +482,7 @@ gtk_radio_button_new_with_mnemonic (GSList      *group,
 }
 
 /**
- * gtk_radio_button_new_from_widget:
+ * gtk_radio_button_new_from_widget: (constructor)
  * @radio_group_member: (allow-none): an existing #GtkRadioButton.
  *
  * Creates a new #GtkRadioButton, adding it to the same group as
@@ -800,7 +801,9 @@ gtk_radio_button_clicked (GtkButton *button)
 
   g_object_ref (GTK_WIDGET (button));
 
-  new_state = gtk_widget_get_state_flags (GTK_WIDGET (button));
+  new_state = gtk_widget_get_state_flags (GTK_WIDGET (button)) &
+    ~(GTK_STATE_FLAG_PRELIGHT |
+      GTK_STATE_FLAG_ACTIVE);
 
   if (gtk_toggle_button_get_active (toggle_button))
     {
@@ -907,6 +910,7 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button,
   button = GTK_BUTTON (check_button);
   toggle_button = GTK_TOGGLE_BUTTON (check_button);
   context = gtk_widget_get_style_context (widget);
+  state = gtk_widget_get_state_flags (widget);
 
   border_width = gtk_container_get_border_width (GTK_CONTAINER (widget));
 
@@ -927,6 +931,11 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button,
   if (!interior_focus || !(child && gtk_widget_get_visible (child)))
     x += focus_width + focus_pad;
 
+  state &= ~(GTK_STATE_FLAG_INCONSISTENT |
+             GTK_STATE_FLAG_ACTIVE |
+             GTK_STATE_FLAG_SELECTED |
+             GTK_STATE_FLAG_PRELIGHT);
+
   if (gtk_toggle_button_get_inconsistent (toggle_button))
     state |= GTK_STATE_FLAG_INCONSISTENT;
   else if (gtk_toggle_button_get_active (toggle_button))
@@ -936,10 +945,8 @@ gtk_radio_button_draw_indicator (GtkCheckButton *check_button,
       (button->priv->button_down && button->priv->in_button))
     state |= GTK_STATE_FLAG_SELECTED;
 
-  if (button->priv->in_button)
+  if (button->priv->in_button && !(state & GTK_STATE_FLAG_INSENSITIVE))
     state |= GTK_STATE_FLAG_PRELIGHT;
-  else if (!gtk_widget_is_sensitive (widget))
-    state |= GTK_STATE_FLAG_INSENSITIVE;
 
   if (gtk_widget_get_direction (widget) == GTK_TEXT_DIR_RTL)
     x = allocation.width - (indicator_size + x);