forked from AuroraMiddleware/gtk
Add a GtkColorButton:modal property
Nowadays, dialogs are expected to be attached, typically, and that only happens when they are marked as modal.
This commit is contained in:
parent
61f21fc9e9
commit
15d58a868a
@ -599,6 +599,8 @@ gtk_color_button_new
|
|||||||
gtk_color_button_new_with_rgba
|
gtk_color_button_new_with_rgba
|
||||||
gtk_color_button_set_title
|
gtk_color_button_set_title
|
||||||
gtk_color_button_get_title
|
gtk_color_button_get_title
|
||||||
|
gtk_color_button_set_modal
|
||||||
|
gtk_color_button_get_modal
|
||||||
<SUBSECTION Standard>
|
<SUBSECTION Standard>
|
||||||
GTK_COLOR_BUTTON
|
GTK_COLOR_BUTTON
|
||||||
GTK_IS_COLOR_BUTTON
|
GTK_IS_COLOR_BUTTON
|
||||||
|
@ -84,8 +84,9 @@ typedef struct
|
|||||||
gchar *title; /* Title for the color selection window */
|
gchar *title; /* Title for the color selection window */
|
||||||
GdkRGBA rgba;
|
GdkRGBA rgba;
|
||||||
|
|
||||||
guint use_alpha : 1; /* Use alpha or not */
|
guint use_alpha : 1; /* Use alpha or not */
|
||||||
guint show_editor : 1;
|
guint show_editor : 1;
|
||||||
|
guint modal : 1;
|
||||||
} GtkColorButtonPrivate;
|
} GtkColorButtonPrivate;
|
||||||
|
|
||||||
/* Properties */
|
/* Properties */
|
||||||
@ -95,7 +96,8 @@ enum
|
|||||||
PROP_USE_ALPHA,
|
PROP_USE_ALPHA,
|
||||||
PROP_TITLE,
|
PROP_TITLE,
|
||||||
PROP_RGBA,
|
PROP_RGBA,
|
||||||
PROP_SHOW_EDITOR
|
PROP_SHOW_EDITOR,
|
||||||
|
PROP_MODAL
|
||||||
};
|
};
|
||||||
|
|
||||||
/* Signals */
|
/* Signals */
|
||||||
@ -226,6 +228,14 @@ gtk_color_button_class_init (GtkColorButtonClass *klass)
|
|||||||
FALSE,
|
FALSE,
|
||||||
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
|
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
|
||||||
|
|
||||||
|
g_object_class_install_property (gobject_class,
|
||||||
|
PROP_MODAL,
|
||||||
|
g_param_spec_boolean ("modal", P_("Modal"),
|
||||||
|
P_("Whether the dialog is modal"),
|
||||||
|
TRUE,
|
||||||
|
GTK_PARAM_READWRITE|G_PARAM_EXPLICIT_NOTIFY));
|
||||||
|
|
||||||
|
|
||||||
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
|
gtk_widget_class_set_layout_manager_type (widget_class, GTK_TYPE_BIN_LAYOUT);
|
||||||
gtk_widget_class_set_css_name (widget_class, "colorbutton");
|
gtk_widget_class_set_css_name (widget_class, "colorbutton");
|
||||||
}
|
}
|
||||||
@ -286,6 +296,7 @@ gtk_color_button_init (GtkColorButton *button)
|
|||||||
priv->rgba.blue = 0;
|
priv->rgba.blue = 0;
|
||||||
priv->rgba.alpha = 1;
|
priv->rgba.alpha = 1;
|
||||||
priv->use_alpha = FALSE;
|
priv->use_alpha = FALSE;
|
||||||
|
priv->modal = TRUE;
|
||||||
|
|
||||||
dest = gtk_drop_target_new (GDK_TYPE_RGBA, GDK_ACTION_COPY);
|
dest = gtk_drop_target_new (GDK_TYPE_RGBA, GDK_ACTION_COPY);
|
||||||
g_signal_connect (dest, "drop", G_CALLBACK (gtk_color_button_drop), button);
|
g_signal_connect (dest, "drop", G_CALLBACK (gtk_color_button_drop), button);
|
||||||
@ -401,14 +412,15 @@ ensure_dialog (GtkColorButton *button)
|
|||||||
|
|
||||||
priv->cs_dialog = dialog = gtk_color_chooser_dialog_new (priv->title, NULL);
|
priv->cs_dialog = dialog = gtk_color_chooser_dialog_new (priv->title, NULL);
|
||||||
gtk_window_set_hide_on_close (GTK_WINDOW (dialog), TRUE);
|
gtk_window_set_hide_on_close (GTK_WINDOW (dialog), TRUE);
|
||||||
|
gtk_window_set_modal (GTK_WINDOW (dialog), priv->modal);
|
||||||
|
|
||||||
if (GTK_IS_WINDOW (parent))
|
if (GTK_IS_WINDOW (parent))
|
||||||
{
|
{
|
||||||
if (GTK_WINDOW (parent) != gtk_window_get_transient_for (GTK_WINDOW (dialog)))
|
if (GTK_WINDOW (parent) != gtk_window_get_transient_for (GTK_WINDOW (dialog)))
|
||||||
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
|
gtk_window_set_transient_for (GTK_WINDOW (dialog), GTK_WINDOW (parent));
|
||||||
|
|
||||||
gtk_window_set_modal (GTK_WINDOW (dialog),
|
if (gtk_window_get_modal (GTK_WINDOW (parent)))
|
||||||
gtk_window_get_modal (GTK_WINDOW (parent)));
|
gtk_window_set_modal (GTK_WINDOW (dialog), TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_signal_connect (dialog, "response",
|
g_signal_connect (dialog, "response",
|
||||||
@ -528,6 +540,50 @@ gtk_color_button_get_title (GtkColorButton *button)
|
|||||||
return priv->title;
|
return priv->title;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_color_button_set_modal:
|
||||||
|
* @button: a #GtkColorButton
|
||||||
|
* @modal: %TRUE to make the dialog modal
|
||||||
|
*
|
||||||
|
* Sets whether the dialog should be modal.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
gtk_color_button_set_modal (GtkColorButton *button,
|
||||||
|
gboolean modal)
|
||||||
|
{
|
||||||
|
GtkColorButtonPrivate *priv = gtk_color_button_get_instance_private (button);
|
||||||
|
|
||||||
|
g_return_if_fail (GTK_IS_COLOR_BUTTON (button));
|
||||||
|
|
||||||
|
if (priv->modal == modal)
|
||||||
|
return;
|
||||||
|
|
||||||
|
priv->modal = modal;
|
||||||
|
|
||||||
|
if (priv->cs_dialog)
|
||||||
|
gtk_window_set_modal (GTK_WINDOW (priv->cs_dialog), priv->modal);
|
||||||
|
|
||||||
|
g_object_notify (G_OBJECT (button), "modal");
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* gtk_color_button_get_modal:
|
||||||
|
* @button: a #GtkColorButton
|
||||||
|
*
|
||||||
|
* Gets whether the dialog is modal.
|
||||||
|
*
|
||||||
|
* Returns: %TRUE if the dialog is modal
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
gtk_color_button_get_modal (GtkColorButton *button)
|
||||||
|
{
|
||||||
|
GtkColorButtonPrivate *priv = gtk_color_button_get_instance_private (button);
|
||||||
|
|
||||||
|
g_return_val_if_fail (GTK_IS_COLOR_BUTTON (button), FALSE);
|
||||||
|
|
||||||
|
return priv->modal;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gtk_color_button_set_property (GObject *object,
|
gtk_color_button_set_property (GObject *object,
|
||||||
guint param_id,
|
guint param_id,
|
||||||
@ -558,6 +614,9 @@ gtk_color_button_set_property (GObject *object,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PROP_MODAL:
|
||||||
|
gtk_color_button_set_modal (button, g_value_get_boolean (value));
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||||
break;
|
break;
|
||||||
@ -592,6 +651,9 @@ gtk_color_button_get_property (GObject *object,
|
|||||||
case PROP_SHOW_EDITOR:
|
case PROP_SHOW_EDITOR:
|
||||||
g_value_set_boolean (value, priv->show_editor);
|
g_value_set_boolean (value, priv->show_editor);
|
||||||
break;
|
break;
|
||||||
|
case PROP_MODAL:
|
||||||
|
g_value_set_boolean (value, priv->modal);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, param_id, pspec);
|
||||||
break;
|
break;
|
||||||
|
@ -58,6 +58,12 @@ void gtk_color_button_set_title (GtkColorButton *button,
|
|||||||
GDK_AVAILABLE_IN_ALL
|
GDK_AVAILABLE_IN_ALL
|
||||||
const gchar *gtk_color_button_get_title (GtkColorButton *button);
|
const gchar *gtk_color_button_get_title (GtkColorButton *button);
|
||||||
|
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
|
gboolean gtk_color_button_get_modal (GtkColorButton *button);
|
||||||
|
GDK_AVAILABLE_IN_ALL
|
||||||
|
void gtk_color_button_set_modal (GtkColorButton *button,
|
||||||
|
gboolean modal);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
#endif /* __GTK_COLOR_BUTTON_H__ */
|
#endif /* __GTK_COLOR_BUTTON_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user