]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkradiotoolbutton.c
Use gdk_threads_add_timeout to popup the selection window
[~andy/gtk] / gtk / gtkradiotoolbutton.c
index 7a332039dc8ad1386cb8325051ef795da74488d8..ab849edab2f634a3df5e719c031372df286af42f 100644 (file)
  * 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/>.
  */
 
+#include "config.h"
 #include "gtkradiotoolbutton.h"
 #include "gtkradiobutton.h"
 #include "gtkintl.h"
+#include "gtkprivate.h"
 
-static void gtk_radio_tool_button_init       (GtkRadioToolButton      *button);
-static void gtk_radio_tool_button_class_init (GtkRadioToolButtonClass *klass);
 
-GType
-gtk_radio_tool_button_get_type (void)
-{
-  static GType type = 0;
+/**
+ * SECTION:gtkradiotoolbutton
+ * @Short_description: A toolbar item that contains a radio button
+ * @Title: GtkRadioToolButton
+ * @See_also: #GtkToolbar, #GtkToolButton
+ *
+ * A #GtkRadioToolButton is a #GtkToolItem that contains a radio button,
+ * that is, a button that is part of a group of toggle buttons where only
+ * one button can be active at a time.
+ *
+ * Use gtk_radio_tool_button_new() to create a new
+ * #GtkRadioToolButton. Use gtk_radio_tool_button_new_from_widget() to
+ * create a new #GtkRadioToolButton that is part of the same group as an
+ * existing #GtkRadioToolButton. Use
+ * gtk_radio_tool_button_new_from_stock() or
+ * gtk_radio_tool_button_new_with_stock_from_widget() create a new
+ * #GtkRadioToolButton containing a stock item.
+ */
 
-  if (!type)
-    {
-      static const GTypeInfo type_info =
-       {
-         sizeof (GtkRadioToolButtonClass),
-         (GBaseInitFunc) NULL,
-         (GBaseFinalizeFunc) NULL,
-         (GClassInitFunc) gtk_radio_tool_button_class_init,
-         (GClassFinalizeFunc) NULL,
-         NULL,
-         sizeof (GtkRadioToolButton),
-         0, /* n_preallocs */
-         (GInstanceInitFunc) gtk_radio_tool_button_init
-       };
-
-      type = g_type_register_static (GTK_TYPE_TOGGLE_TOOL_BUTTON,
-                                    "GtkRadioToolButton", &type_info, 0);
-    }
-  return type;
-}
 
-     
+enum {
+  PROP_0,
+  PROP_GROUP
+};
+
+static void gtk_radio_tool_button_set_property (GObject         *object,
+                                               guint            prop_id,
+                                               const GValue    *value,
+                                               GParamSpec      *pspec);
+
+G_DEFINE_TYPE (GtkRadioToolButton, gtk_radio_tool_button, GTK_TYPE_TOGGLE_TOOL_BUTTON)
+
 static void
 gtk_radio_tool_button_class_init (GtkRadioToolButtonClass *klass)
 {
+  GObjectClass *object_class;
   GtkToolButtonClass *toolbutton_class;
 
+  object_class = (GObjectClass *)klass;
   toolbutton_class = (GtkToolButtonClass *)klass;
+
+  object_class->set_property = gtk_radio_tool_button_set_property;
   
   toolbutton_class->button_type = GTK_TYPE_RADIO_BUTTON;  
+
+  /**
+   * GtkRadioToolButton:group:
+   *
+   * Sets a new group for a radio tool button.
+   *
+   * Since: 2.4
+   */
+  g_object_class_install_property (object_class,
+                                  PROP_GROUP,
+                                  g_param_spec_object ("group",
+                                                       P_("Group"),
+                                                       P_("The radio tool button whose group this button belongs to."),
+                                                       GTK_TYPE_RADIO_TOOL_BUTTON,
+                                                       GTK_PARAM_WRITABLE));
+
 }
 
 static void
@@ -71,9 +94,41 @@ gtk_radio_tool_button_init (GtkRadioToolButton *button)
   gtk_toggle_button_set_mode (GTK_TOGGLE_BUTTON (_gtk_tool_button_get_button (tool_button)), FALSE);
 }
 
+static void
+gtk_radio_tool_button_set_property (GObject         *object,
+                                   guint            prop_id,
+                                   const GValue    *value,
+                                   GParamSpec      *pspec)
+{
+  GtkRadioToolButton *button;
+
+  button = GTK_RADIO_TOOL_BUTTON (object);
+
+  switch (prop_id)
+    {
+    case PROP_GROUP:
+      {
+       GtkRadioToolButton *arg;
+       GSList *slist = NULL;
+       if (G_VALUE_HOLDS_OBJECT (value)) 
+         {
+           arg = GTK_RADIO_TOOL_BUTTON (g_value_get_object (value));
+           if (arg)
+             slist = gtk_radio_tool_button_get_group (arg);
+           gtk_radio_tool_button_set_group (button, slist);
+         }
+      }
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+      break;
+    }
+}
+
 /**
  * gtk_radio_tool_button_new:
- * @group: An existing radio button group, or %NULL if you are creating a new group
+ * @group: (allow-none) (transfer none) (element-type GtkRadioButton): An
+ *   existing radio button group, or %NULL if you are creating a new group
  * 
  * Creates a new #GtkRadioToolButton, adding it to @group.
  * 
@@ -96,14 +151,15 @@ gtk_radio_tool_button_new (GSList *group)
 
 /**
  * gtk_radio_tool_button_new_from_stock:
- * @group: an existing radio button group, or %NULL if you are creating a new group
+ * @group: (allow-none) (element-type GtkRadioButton): an existing radio button
+ *   group, or %NULL if you are creating a new group
  * @stock_id: the name of a stock item
  * 
  * Creates a new #GtkRadioToolButton, adding it to @group. 
  * The new #GtkRadioToolButton will contain an icon and label from the
  * stock item indicated by @stock_id.
  * 
- * Return value: The new #GtkRadioToolItem
+ * Return value: The new #GtkRadioToolButton
  * 
  * Since: 2.4
  **/
@@ -116,7 +172,7 @@ gtk_radio_tool_button_new_from_stock (GSList      *group,
   g_return_val_if_fail (stock_id != NULL, NULL);
   
   button = g_object_new (GTK_TYPE_RADIO_TOOL_BUTTON,
-                        "stock_id", stock_id,
+                        "stock-id", stock_id,
                         NULL);
 
 
@@ -126,13 +182,13 @@ gtk_radio_tool_button_new_from_stock (GSList      *group,
 }
 
 /**
- * gtk_radio_tool_button_new_from_widget:
- * @group: An existing #GtkRadioToolButton
- * 
+ * gtk_radio_tool_button_new_from_widget: (constructor)
+ * @group: (allow-none): An existing #GtkRadioToolButton, or %NULL
+ *
  * Creates a new #GtkRadioToolButton adding it to the same group as @gruup
- * 
- * Return value: The new #GtkRadioToolButton
- * 
+ *
+ * Return value: (transfer none): The new #GtkRadioToolButton
+ *
  * Since: 2.4
  **/
 GtkToolItem *
@@ -140,25 +196,25 @@ gtk_radio_tool_button_new_from_widget (GtkRadioToolButton *group)
 {
   GSList *list = NULL;
   
-  g_return_val_if_fail (GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
+  g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
 
-  if (group)
+  if (group != NULL)
     list = gtk_radio_tool_button_get_group (GTK_RADIO_TOOL_BUTTON (group));
   
   return gtk_radio_tool_button_new (list);
 }
 
 /**
- * gtk_radio_tool_button_new_with_stock_from_widget:
- * @group: An existing #GtkRadioToolButton.
- * @stock_id: the name of a stock item 
- * 
+ * gtk_radio_tool_button_new_with_stock_from_widget: (constructor)
+ * @group: (allow-none): An existing #GtkRadioToolButton.
+ * @stock_id: the name of a stock item
+ *
  * Creates a new #GtkRadioToolButton adding it to the same group as @group.
  * The new #GtkRadioToolButton will contain an icon and label from the
  * stock item indicated by @stock_id.
- * 
- * Return value: A new #GtkRadioToolButton
- * 
+ *
+ * Return value: (transfer none): A new #GtkRadioToolButton
+ *
  * Since: 2.4
  **/
 GtkToolItem *
@@ -167,9 +223,9 @@ gtk_radio_tool_button_new_with_stock_from_widget (GtkRadioToolButton *group,
 {
   GSList *list = NULL;
   
-  g_return_val_if_fail (GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
+  g_return_val_if_fail (group == NULL || GTK_IS_RADIO_TOOL_BUTTON (group), NULL);
 
-  if (group)
+  if (group != NULL)
     list = gtk_radio_tool_button_get_group (group);
   
   return gtk_radio_tool_button_new_from_stock (list, stock_id);
@@ -186,11 +242,11 @@ get_radio_button (GtkRadioToolButton *button)
  * @button: a #GtkRadioToolButton
  *
  * Returns the radio button group @button belongs to.
- * 
- * Return value: The group @button belongs to.
- * 
+ *
+ * Return value: (transfer none) (element-type GtkRadioButton): The group @button belongs to.
+ *
  * Since: 2.4
- **/
+ */
 GSList *
 gtk_radio_tool_button_get_group (GtkRadioToolButton *button)
 {
@@ -202,7 +258,7 @@ gtk_radio_tool_button_get_group (GtkRadioToolButton *button)
 /**
  * gtk_radio_tool_button_set_group:
  * @button: a #GtkRadioToolButton
- * @group: an existing radio button group
+ * @group: (transfer none) (element-type GtkRadioButton): an existing radio button group
  * 
  * Adds @button to @group, removing it from the group it belonged to before.
  * 
@@ -216,4 +272,3 @@ gtk_radio_tool_button_set_group (GtkRadioToolButton *button,
 
   gtk_radio_button_set_group (get_radio_button (button), group);
 }
-