forked from AuroraMiddleware/gtk
Add a public setting for button ordering (#74669, Owen Taylor)
2004-10-25 Matthias Clasen <mclasen@redhat.com> Add a public setting for button ordering (#74669, Owen Taylor) * gtk/gtksettings.c (gtk_settings_class_init): Add a gtk-alternative-button-order setting. * gtk/gtkdialog.h: * gtk/gtkdialog.c (gtk_alternative_dialog_button_order): A getter for the alternative button order setting. * gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order): New function to install an alternative button order for a dialog. * gtk/gtkfilesel.c (gtk_file_selection_init): * gtk/gtkfontsel.c (gtk_font_selection_dialog_init): * gtk/gtkmessagedialog.c (gtk_message_dialog_add_buttons): * gtk/gtkcolorseldialog.c (gtk_color_selection_dialog_init): * gtk/gtkfilechooserdefault.c (location_popup_handler): Set up an alternative button order.
This commit is contained in:
parent
b63431c82a
commit
8ab4fd4526
21
ChangeLog
21
ChangeLog
@ -1,3 +1,24 @@
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add a public setting for button ordering (#74669, Owen Taylor)
|
||||
|
||||
* gtk/gtksettings.c (gtk_settings_class_init): Add a
|
||||
gtk-alternative-button-order setting.
|
||||
|
||||
* gtk/gtkdialog.h:
|
||||
* gtk/gtkdialog.c (gtk_alternative_dialog_button_order): A
|
||||
getter for the alternative button order setting.
|
||||
* gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order):
|
||||
New function to install an alternative button order for a
|
||||
dialog.
|
||||
|
||||
* gtk/gtkfilesel.c (gtk_file_selection_init):
|
||||
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init):
|
||||
* gtk/gtkmessagedialog.c (gtk_message_dialog_add_buttons):
|
||||
* gtk/gtkcolorseldialog.c (gtk_color_selection_dialog_init):
|
||||
* gtk/gtkfilechooserdefault.c (location_popup_handler):
|
||||
Set up an alternative button order.
|
||||
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtkimage.h:
|
||||
|
@ -1,3 +1,24 @@
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add a public setting for button ordering (#74669, Owen Taylor)
|
||||
|
||||
* gtk/gtksettings.c (gtk_settings_class_init): Add a
|
||||
gtk-alternative-button-order setting.
|
||||
|
||||
* gtk/gtkdialog.h:
|
||||
* gtk/gtkdialog.c (gtk_alternative_dialog_button_order): A
|
||||
getter for the alternative button order setting.
|
||||
* gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order):
|
||||
New function to install an alternative button order for a
|
||||
dialog.
|
||||
|
||||
* gtk/gtkfilesel.c (gtk_file_selection_init):
|
||||
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init):
|
||||
* gtk/gtkmessagedialog.c (gtk_message_dialog_add_buttons):
|
||||
* gtk/gtkcolorseldialog.c (gtk_color_selection_dialog_init):
|
||||
* gtk/gtkfilechooserdefault.c (location_popup_handler):
|
||||
Set up an alternative button order.
|
||||
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtkimage.h:
|
||||
|
@ -1,3 +1,24 @@
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add a public setting for button ordering (#74669, Owen Taylor)
|
||||
|
||||
* gtk/gtksettings.c (gtk_settings_class_init): Add a
|
||||
gtk-alternative-button-order setting.
|
||||
|
||||
* gtk/gtkdialog.h:
|
||||
* gtk/gtkdialog.c (gtk_alternative_dialog_button_order): A
|
||||
getter for the alternative button order setting.
|
||||
* gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order):
|
||||
New function to install an alternative button order for a
|
||||
dialog.
|
||||
|
||||
* gtk/gtkfilesel.c (gtk_file_selection_init):
|
||||
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init):
|
||||
* gtk/gtkmessagedialog.c (gtk_message_dialog_add_buttons):
|
||||
* gtk/gtkcolorseldialog.c (gtk_color_selection_dialog_init):
|
||||
* gtk/gtkfilechooserdefault.c (location_popup_handler):
|
||||
Set up an alternative button order.
|
||||
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtkimage.h:
|
||||
|
@ -1,3 +1,24 @@
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
Add a public setting for button ordering (#74669, Owen Taylor)
|
||||
|
||||
* gtk/gtksettings.c (gtk_settings_class_init): Add a
|
||||
gtk-alternative-button-order setting.
|
||||
|
||||
* gtk/gtkdialog.h:
|
||||
* gtk/gtkdialog.c (gtk_alternative_dialog_button_order): A
|
||||
getter for the alternative button order setting.
|
||||
* gtk/gtkdialog.c (gtk_dialog_set_alternative_button_order):
|
||||
New function to install an alternative button order for a
|
||||
dialog.
|
||||
|
||||
* gtk/gtkfilesel.c (gtk_file_selection_init):
|
||||
* gtk/gtkfontsel.c (gtk_font_selection_dialog_init):
|
||||
* gtk/gtkmessagedialog.c (gtk_message_dialog_add_buttons):
|
||||
* gtk/gtkcolorseldialog.c (gtk_color_selection_dialog_init):
|
||||
* gtk/gtkfilechooserdefault.c (location_popup_handler):
|
||||
Set up an alternative button order.
|
||||
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtkimage.h:
|
||||
|
@ -1,6 +1,7 @@
|
||||
2004-10-25 Matthias Clasen <mclasen@redhat.com>
|
||||
|
||||
* gtk/gtk-sections.txt: Add new named icon api in GtkImage.
|
||||
Add new button order api.
|
||||
|
||||
Sun Oct 24 02:54:36 2004 Jonathan Blandford <jrb@redhat.com>
|
||||
|
||||
|
@ -968,6 +968,10 @@ gtk_dialog_get_has_separator
|
||||
gtk_dialog_set_default_response
|
||||
gtk_dialog_set_has_separator
|
||||
gtk_dialog_set_response_sensitive
|
||||
<SUBSECTION>
|
||||
gtk_alternative_dialog_button_order
|
||||
gtk_dialog_set_alternative_button_order
|
||||
|
||||
<SUBSECTION Standard>
|
||||
GTK_DIALOG
|
||||
GTK_IS_DIALOG
|
||||
|
@ -113,6 +113,12 @@ gtk_color_selection_dialog_init (GtkColorSelectionDialog *colorseldiag)
|
||||
|
||||
gtk_widget_hide (colorseldiag->help_button);
|
||||
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (colorseldiag),
|
||||
GTK_RESPONSE_OK,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
GTK_RESPONSE_HELP,
|
||||
-1);
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (colorseldiag),
|
||||
_("Color Selection"));
|
||||
}
|
||||
|
138
gtk/gtkdialog.c
138
gtk/gtkdialog.c
@ -381,11 +381,12 @@ gtk_dialog_style_set (GtkWidget *widget,
|
||||
update_spacings (GTK_DIALOG (widget));
|
||||
}
|
||||
|
||||
static gboolean
|
||||
dialog_has_cancel (GtkDialog *dialog)
|
||||
static GtkWidget *
|
||||
dialog_find_button (GtkDialog *dialog,
|
||||
gint response_id)
|
||||
{
|
||||
GList *children, *tmp_list;
|
||||
gboolean ret = FALSE;
|
||||
GtkWidget *child = NULL;
|
||||
|
||||
children = gtk_container_get_children (GTK_CONTAINER (dialog->action_area));
|
||||
|
||||
@ -393,16 +394,16 @@ dialog_has_cancel (GtkDialog *dialog)
|
||||
{
|
||||
ResponseData *rd = get_response_data (tmp_list->data, FALSE);
|
||||
|
||||
if (rd && rd->response_id == GTK_RESPONSE_CANCEL)
|
||||
if (rd && rd->response_id == response_id)
|
||||
{
|
||||
ret = TRUE;
|
||||
child = tmp_list->data;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (children);
|
||||
|
||||
return ret;
|
||||
return child;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -413,7 +414,7 @@ gtk_dialog_close (GtkDialog *dialog)
|
||||
GtkWidget *widget = GTK_WIDGET (dialog);
|
||||
GdkEvent *event;
|
||||
|
||||
if (!dialog_has_cancel (dialog))
|
||||
if (!dialog_find_button (dialog, GTK_RESPONSE_CANCEL))
|
||||
return;
|
||||
|
||||
event = gdk_event_new (GDK_DELETE);
|
||||
@ -1062,3 +1063,126 @@ _gtk_dialog_get_response_for_widget (GtkDialog *dialog,
|
||||
else
|
||||
return rd->response_id;
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_alternative_dialog_button_order:
|
||||
* @screen: a #GdkScreen, or %NULL to use the default screen
|
||||
*
|
||||
* Returns %TRUE if dialogs are expected to use an alternative
|
||||
* button order on the screen @screen. See
|
||||
* gtk_dialog_set_alternative_button_order() for more details
|
||||
* about alternative button order.
|
||||
*
|
||||
* If you need to use this function, you should probably connect
|
||||
* to the ::notify:gtk-alternative-button-order signal on the
|
||||
* #GtkSettings object associated to @screen, in order to be
|
||||
* notified if the button order setting changes.
|
||||
*
|
||||
* Returns: Whether the alternative button order should be used
|
||||
*
|
||||
* Since: 2.6
|
||||
*/
|
||||
gboolean
|
||||
gtk_alternative_dialog_button_order (GdkScreen *screen)
|
||||
{
|
||||
GtkSettings *settings;
|
||||
gboolean result;
|
||||
|
||||
if (screen)
|
||||
settings = gtk_settings_get_for_screen (screen);
|
||||
else
|
||||
settings = gtk_settings_get_default ();
|
||||
|
||||
g_object_get (settings,
|
||||
"gtk-alternative-button-order", &result, NULL);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static void
|
||||
gtk_dialog_set_alternative_button_order_valist (GtkDialog *dialog,
|
||||
gint first_response_id,
|
||||
va_list args)
|
||||
{
|
||||
GtkWidget *child;
|
||||
gint response_id;
|
||||
gint position;
|
||||
|
||||
response_id = first_response_id;
|
||||
position = 0;
|
||||
while (response_id != -1)
|
||||
{
|
||||
/* reorder child with response_id to position */
|
||||
child = dialog_find_button (dialog, response_id);
|
||||
gtk_box_reorder_child (GTK_BOX (dialog->action_area), child, position);
|
||||
|
||||
response_id = va_arg (args, gint);
|
||||
position++;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* gtk_dialog_set_alternative_button_order:
|
||||
* @dialog: a #GtkDialog
|
||||
* @first_response_id: a response id used by one @dialog's buttons
|
||||
* @Varargs: a list of more response ids of @dialog's buttons, terminated by -1
|
||||
*
|
||||
* Sets an alternative button order. If the gtk-alternative-button-order
|
||||
* setting is set to %TRUE, the dialog buttons are reordered according to
|
||||
* the order of the response ids passed to this function.
|
||||
*
|
||||
* By default, GTK+ dialogs use the button order advocated by the Gnome
|
||||
* <ulink url="http://developer.gnome.org/projects/gup/hig/2.0/">Human
|
||||
* Interface Guidelines</ulink> with the affirmative button at the far
|
||||
* right, and the cancel button left of it. But the builtin GTK+ dialogs
|
||||
* and #GtkMessageDialog<!-- -->s do provide an alternative button order,
|
||||
* which is more suitable on some platforms, e.g. Windows.
|
||||
*
|
||||
* Use this function after adding all the buttons to your dialog, as the
|
||||
* following example shows:
|
||||
* <informalexample><programlisting>
|
||||
* cancel_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
|
||||
* GTK_STOCK_CANCEL,
|
||||
* GTK_RESPONSE_CANCEL);
|
||||
*
|
||||
* ok_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
|
||||
* GTK_STOCK_OK,
|
||||
* GTK_RESPONSE_OK);
|
||||
*
|
||||
* gtk_widget_grab_default (ok_button);
|
||||
*
|
||||
* help_button = gtk_dialog_add_button (GTK_DIALOG (dialog),
|
||||
* GTK_STOCK_HELP,
|
||||
* GTK_RESPONSE_HELP);
|
||||
*
|
||||
* gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
|
||||
* GTK_RESPONSE_OK,
|
||||
* GTK_RESPONSE_CANCEL,
|
||||
* GTK_RESPONSE_HELP,
|
||||
* -1);
|
||||
* </programlisting></informalexample>
|
||||
*
|
||||
* Since: 2.6
|
||||
*/
|
||||
void
|
||||
gtk_dialog_set_alternative_button_order (GtkDialog *dialog,
|
||||
gint first_response_id,
|
||||
...)
|
||||
{
|
||||
GdkScreen *screen;
|
||||
va_list args;
|
||||
|
||||
g_return_if_fail (GTK_IS_DIALOG (dialog));
|
||||
|
||||
screen = gtk_widget_get_screen (GTK_WIDGET (dialog));
|
||||
if (!gtk_alternative_dialog_button_order (screen))
|
||||
return;
|
||||
|
||||
va_start (args, first_response_id);
|
||||
|
||||
gtk_dialog_set_alternative_button_order_valist (dialog,
|
||||
first_response_id,
|
||||
args);
|
||||
va_end (args);
|
||||
}
|
||||
|
||||
|
@ -152,6 +152,11 @@ void gtk_dialog_set_has_separator (GtkDialog *dialog,
|
||||
gboolean setting);
|
||||
gboolean gtk_dialog_get_has_separator (GtkDialog *dialog);
|
||||
|
||||
gboolean gtk_alternative_dialog_button_order (GdkScreen *screen);
|
||||
void gtk_dialog_set_alternative_button_order (GtkDialog *dialog,
|
||||
gint first_response_id,
|
||||
...);
|
||||
|
||||
/* Emit response signal */
|
||||
void gtk_dialog_response (GtkDialog *dialog,
|
||||
gint response_id);
|
||||
|
@ -5787,6 +5787,11 @@ location_popup_handler (GtkFileChooserDefault *impl,
|
||||
gtk_box_set_spacing (GTK_BOX (GTK_DIALOG (dialog)->vbox), 2);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_ACCEPT);
|
||||
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
|
||||
GTK_RESPONSE_ACCEPT,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
|
||||
hbox = gtk_hbox_new (FALSE, 12);
|
||||
gtk_box_pack_start (GTK_BOX (GTK_DIALOG (dialog)->vbox), hbox, FALSE, FALSE, 0);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (hbox), 5);
|
||||
|
@ -811,7 +811,12 @@ gtk_file_selection_init (GtkFileSelection *filesel)
|
||||
filesel->ok_button = gtk_dialog_add_button (dialog,
|
||||
GTK_STOCK_OK,
|
||||
GTK_RESPONSE_OK);
|
||||
|
||||
|
||||
gtk_dialog_set_alternative_button_order (dialog,
|
||||
GTK_RESPONSE_OK,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
|
||||
gtk_widget_grab_default (filesel->ok_button);
|
||||
|
||||
/* The selection entry widget */
|
||||
|
@ -1371,6 +1371,13 @@ gtk_font_selection_dialog_init (GtkFontSelectionDialog *fontseldiag)
|
||||
GTK_RESPONSE_OK);
|
||||
gtk_widget_grab_default (fontseldiag->ok_button);
|
||||
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (fontseldiag),
|
||||
GTK_RESPONSE_OK,
|
||||
GTK_RESPONSE_APPLY,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
|
||||
|
||||
gtk_window_set_title (GTK_WINDOW (fontseldiag),
|
||||
_("Font Selection"));
|
||||
|
||||
|
@ -494,6 +494,10 @@ gtk_message_dialog_add_buttons (GtkMessageDialog* message_dialog,
|
||||
gtk_dialog_add_button (dialog,
|
||||
GTK_STOCK_YES,
|
||||
GTK_RESPONSE_YES);
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
|
||||
GTK_RESPONSE_YES,
|
||||
GTK_RESPONSE_NO,
|
||||
-1);
|
||||
break;
|
||||
|
||||
case GTK_BUTTONS_OK_CANCEL:
|
||||
@ -503,6 +507,10 @@ gtk_message_dialog_add_buttons (GtkMessageDialog* message_dialog,
|
||||
gtk_dialog_add_button (dialog,
|
||||
GTK_STOCK_OK,
|
||||
GTK_RESPONSE_OK);
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (dialog),
|
||||
GTK_RESPONSE_OK,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -69,7 +69,8 @@ enum {
|
||||
PROP_XFT_HINTING,
|
||||
PROP_XFT_HINTSTYLE,
|
||||
PROP_XFT_RGBA,
|
||||
PROP_XFT_DPI
|
||||
PROP_XFT_DPI,
|
||||
PROP_ALTERNATIVE_BUTTON_ORDER
|
||||
};
|
||||
|
||||
|
||||
@ -424,6 +425,14 @@ gtk_settings_class_init (GtkSettingsClass *class)
|
||||
|
||||
g_assert (result == PROP_XFT_DPI);
|
||||
#endif /* GDK_WINDOWING_X11 */
|
||||
result = settings_install_property_parser (class,
|
||||
g_param_spec_boolean ("gtk-alternative-button-order",
|
||||
P_("Alternative button order"),
|
||||
P_("Whether buttons in dialogs should use the alternative button order"),
|
||||
FALSE,
|
||||
G_PARAM_READWRITE),
|
||||
NULL);
|
||||
g_assert (result == PROP_ALTERNATIVE_BUTTON_ORDER);
|
||||
}
|
||||
|
||||
static void
|
||||
|
Loading…
Reference in New Issue
Block a user