diff options
-rw-r--r-- | ChangeLog | 24 | ||||
-rw-r--r-- | gui/gdmlogin.c | 5 | ||||
-rw-r--r-- | gui/greeter/greeter.h | 2 | ||||
-rw-r--r-- | gui/greeter/greeter_action_language.c | 1 | ||||
-rw-r--r-- | gui/greeter/greeter_canvas_item.c | 41 | ||||
-rw-r--r-- | gui/greeter/greeter_events.c | 33 | ||||
-rw-r--r-- | gui/greeter/greeter_events.h | 9 | ||||
-rw-r--r-- | gui/greeter/greeter_geometry.c | 4 | ||||
-rw-r--r-- | gui/greeter/greeter_item.c | 29 | ||||
-rw-r--r-- | gui/greeter/greeter_item_clock.c | 2 | ||||
-rw-r--r-- | gui/greeter/greeter_item_pam.c | 6 | ||||
-rw-r--r-- | gui/greeter/greeter_parser.c | 12 | ||||
-rw-r--r-- | gui/greeter/greeter_session.c | 1 | ||||
-rw-r--r-- | gui/greeter/greeter_system.c | 3 | ||||
-rw-r--r-- | gui/greeter/themes/circles/circles.xml.in | 10 | ||||
-rw-r--r-- | gui/greeter/themes/happygnome/happygnome.xml.in | 10 |
16 files changed, 152 insertions, 40 deletions
@@ -1,3 +1,27 @@ +Wed Aug 07 20:20:17 2002 George Lebl <jirka@5z.com> + + * gui/greeter/*.c: include file fixups + + * gui/greeter/greeter_events.[ch], gui/greeter/greeter.[ch], + gui/greeter/greeter_canvas_item.c, gui/greeter/greeter_item.c: + Add an incredible hack for doing mnemonics on the graphical + greeter with offscreen buttons and such stuff. + + * gui/greeter/greeter_system.c: fix window close should do cancel + not ok. + + * gui/gdmlogin.c, gui/greeter/greeter_item_pam.c: ignore also + left_tab (shift+tab), and the KP versions of up/down/tab, + so that we don't lose focus + + * gui/greeter/themes/circles/circles.xml.in, + gui/greeter/themes/happygnome/happygnome.xml.in: use the + mnemonic versions of the button labels so that we get some + keynav. + + * gui/greeter/greeter_parser.c: when we can't get any translations, + try our own gettext database to find the text. + Wed Aug 07 18:38:11 2002 George Lebl <jirka@5z.com> * config/gdm.conf.in, daemon/gdm.h: some fixups to the default diff --git a/gui/gdmlogin.c b/gui/gdmlogin.c index 9f30c4e6..081e6448 100644 --- a/gui/gdmlogin.c +++ b/gui/gdmlogin.c @@ -1311,10 +1311,15 @@ gdm_login_entry_handler (GtkWidget *widget, GdkEventKey *event) case GDK_Up: case GDK_Down: case GDK_Tab: + case GDK_ISO_Left_Tab: + case GDK_KP_Up: + case GDK_KP_Down: + case GDK_KP_Tab: g_signal_stop_emission_by_name (G_OBJECT (entry), "key_press_event"); return TRUE; default: + g_print ("0x%x\n", (int)event->keyval); break; } diff --git a/gui/greeter/greeter.h b/gui/greeter/greeter.h index a0a1db00..aa6c3242 100644 --- a/gui/greeter/greeter.h +++ b/gui/greeter/greeter.h @@ -4,6 +4,8 @@ #include <gtk/gtk.h> extern gboolean DOING_GDM_DEVELOPMENT; +extern GtkWidget *canvas; +extern GtkWidget *window; void greeter_abort (const gchar *format, ...); gboolean greeter_query (const gchar *msg); diff --git a/gui/greeter/greeter_action_language.c b/gui/greeter/greeter_action_language.c index 1dbd96f2..bd7b9ae6 100644 --- a/gui/greeter/greeter_action_language.c +++ b/gui/greeter/greeter_action_language.c @@ -1,5 +1,6 @@ #include "config.h" +#include <libgnome/libgnome.h> #include <gtk/gtk.h> #include <string.h> diff --git a/gui/greeter/greeter_canvas_item.c b/gui/greeter/greeter_canvas_item.c index 9495f89e..81f60983 100644 --- a/gui/greeter/greeter_canvas_item.c +++ b/gui/greeter/greeter_canvas_item.c @@ -1,8 +1,13 @@ +#include "config.h" + #include <math.h> +#include <string.h> #include <gtk/gtk.h> #include <librsvg/rsvg.h> +#include "greeter.h" #include "greeter_item.h" +#include "greeter_events.h" #include "greeter_canvas_item.h" #include "greeter_configuration.h" @@ -90,6 +95,14 @@ transform_pixbuf (GdkPixbuf *orig, return scaled; } +static void +fake_button_clicked (GtkWidget *widget, gpointer data) +{ + const char *id = data; + if (id != NULL) + greeter_item_run_action_callback (id); +} + void greeter_item_create_canvas_item (GreeterItemInfo *item) { @@ -178,13 +191,39 @@ greeter_item_create_canvas_item (GreeterItemInfo *item) item->item = gnome_canvas_item_new (group, GNOME_TYPE_CANVAS_TEXT, - "text", text, + "markup", text, "x", x1, "y", y1, "anchor", item->anchor, "font_desc", item->fonts[GREETER_ITEM_STATE_NORMAL], "fill_color_rgba", item->colors[GREETER_ITEM_STATE_NORMAL], NULL); + + /* if there is an accelerator we do an INCREDIBLE hack */ + if (strchr (item->orig_text, '_') != NULL) + { + GreeterItemInfo *button; + GtkWidget *fake_button = gtk_button_new_with_mnemonic (item->orig_text); + gtk_widget_show (fake_button); + GTK_WIDGET_SET_FLAGS (fake_button, GTK_CAN_FOCUS); + gnome_canvas_item_new (gnome_canvas_root (GNOME_CANVAS (canvas)), + GNOME_TYPE_CANVAS_WIDGET, + "widget", fake_button, + "x", (double)-999.0, + "y", (double)-999.0, + "height", (double)20.0, + "width", (double)20.0, + NULL); + button = greeter_item_find_my_button (item); + if (button == NULL) + button = item; + g_signal_connect_data (G_OBJECT (fake_button), "clicked", + G_CALLBACK (fake_button_clicked), + g_strdup (button->id), + (GClosureNotify)g_free, + 0 /* connect_flags */); + } + g_free (text); break; diff --git a/gui/greeter/greeter_events.c b/gui/greeter/greeter_events.c index f34883d7..84aee9bb 100644 --- a/gui/greeter/greeter_events.c +++ b/gui/greeter/greeter_events.c @@ -1,8 +1,11 @@ +#include "config.h" + #include <gtk/gtk.h> #include <string.h> #include <stdlib.h> #include "greeter_item.h" +#include "greeter_parser.h" #include "greeter_events.h" struct CallbackInfo { @@ -87,6 +90,27 @@ propagate_reset_state (GreeterItemInfo *info, g_list_foreach (info->box_children, propagate_reset_state_foreach, NULL); } +void +greeter_item_run_action_callback (const char *id) +{ + struct CallbackInfo *cb_info; + GreeterItemInfo *info; + + g_return_if_fail (id != NULL); + + if (callback_hash == NULL) + return; + + info = greeter_lookup_id (id); + if (info == NULL) + return; + + cb_info = g_hash_table_lookup (callback_hash, info->id); + + if (cb_info) + (*cb_info->func) (info, cb_info->user_data); +} + gint greeter_item_event_handler (GnomeCanvasItem *item, GdkEvent *event, @@ -129,14 +153,7 @@ greeter_item_event_handler (GnomeCanvasItem *item, info->mouse_down = FALSE; if (info->mouse_over && info->id && callback_hash) - { - struct CallbackInfo *cb_info; - - cb_info = g_hash_table_lookup (callback_hash, info->id); - - if (cb_info) - (*cb_info->func) (info, cb_info->user_data); - } + greeter_item_run_action_callback (info->id); break; default: diff --git a/gui/greeter/greeter_events.h b/gui/greeter/greeter_events.h index 57b173e9..fbe32d07 100644 --- a/gui/greeter/greeter_events.h +++ b/gui/greeter/greeter_events.h @@ -1,5 +1,5 @@ -#ifndef __GREETER_EVENTS_H__ -#define __GREETER_EVENTS_H__ +#ifndef GREETER_EVENTS_H +#define GREETER_EVENTS_H typedef void (*ActionFunc) (GreeterItemInfo *info, gpointer user_data); @@ -12,7 +12,6 @@ void greeter_item_register_action_callback (char *id, ActionFunc func, gpointer user_data); - +void greeter_item_run_action_callback (const char *id); - -#endif /* __GREETER_EVENTS_H__ */ +#endif /* GREETER_EVENTS_H */ diff --git a/gui/greeter/greeter_geometry.c b/gui/greeter/greeter_geometry.c index 3fde5464..a76f7d0e 100644 --- a/gui/greeter/greeter_geometry.c +++ b/gui/greeter/greeter_geometry.c @@ -1,3 +1,5 @@ +#include "config.h" + #include <gtk/gtk.h> #include "greeter_geometry.h" #include "greeter_canvas_item.h" @@ -438,7 +440,7 @@ greeter_item_size_request (GreeterItemInfo *item, canvas_item = gnome_canvas_item_new (gnome_canvas_root (canvas), GNOME_TYPE_CANVAS_TEXT, - "text", text, + "markup", text, "x", 0.0, "y", 0.0, "font_desc", item->fonts[GREETER_ITEM_STATE_NORMAL], diff --git a/gui/greeter/greeter_item.c b/gui/greeter/greeter_item.c index d0ccee6e..356752a8 100644 --- a/gui/greeter/greeter_item.c +++ b/gui/greeter/greeter_item.c @@ -73,7 +73,7 @@ greeter_item_update_text (GreeterItemInfo *info) text = greeter_item_expand_text (info->orig_text); g_object_set (G_OBJECT (info->item), - "text", text, + "markup", text, NULL); g_free (text); @@ -107,9 +107,9 @@ greeter_item_expand_text (const char *text) { GString *str; const char *p; - const char *q; char *clock; int r; + gboolean underline = FALSE; char buf[256]; str = g_string_sized_new (strlen (text)); @@ -161,26 +161,27 @@ greeter_item_expand_text (const char *text) default: g_warning ("unknown escape code %%%c in text\n", *p); } - p++; + } + else if (*p == '_') + { + underline = TRUE; + g_string_append (str, "<u>"); } else { - q = strchr(p, '%'); - if (q == NULL) - { - g_string_append (str, p); - break; - } - else - { - g_string_append_len (str, p, q - p); - p = q; - } + g_string_append_c (str, *p); + if (underline) + g_string_append (str, "</u>"); + underline = FALSE; } + p++; } bail: + if (underline) + g_string_append (str, "</u>"); + return g_string_free (str, FALSE); } diff --git a/gui/greeter/greeter_item_clock.c b/gui/greeter/greeter_item_clock.c index 6f4874f9..0fd6e22b 100644 --- a/gui/greeter/greeter_item_clock.c +++ b/gui/greeter/greeter_item_clock.c @@ -1,3 +1,5 @@ +#include "config.h" + #include <gtk/gtk.h> #include <time.h> #include "greeter_item_clock.h" diff --git a/gui/greeter/greeter_item_pam.c b/gui/greeter/greeter_item_pam.c index f74d4360..92a51ec2 100644 --- a/gui/greeter/greeter_item_pam.c +++ b/gui/greeter/greeter_item_pam.c @@ -1,3 +1,5 @@ +#include "config.h" + #include <gtk/gtk.h> #include <gdk/gdkkeysyms.h> #include "greeter_item_pam.h" @@ -70,6 +72,10 @@ key_press_handler (GtkWidget *widget, GdkEventKey *event) case GDK_Up: case GDK_Down: case GDK_Tab: + case GDK_ISO_Left_Tab: + case GDK_KP_Up: + case GDK_KP_Down: + case GDK_KP_Tab: g_signal_stop_emission_by_name (G_OBJECT (widget), "key_press_event"); return TRUE; diff --git a/gui/greeter/greeter_parser.c b/gui/greeter/greeter_parser.c index 34185a41..fe8c1aa7 100644 --- a/gui/greeter/greeter_parser.c +++ b/gui/greeter/greeter_parser.c @@ -1,3 +1,5 @@ +#include "config.h" + #include <gtk/gtk.h> #include <libxml/parser.h> #include <string.h> @@ -8,6 +10,8 @@ #include <locale.h> #include <libgnome/gnome-i18n.h> +#include <vicious.h> + #include "greeter_parser.h" #include "greeter_events.h" @@ -957,6 +961,14 @@ parse_label (xmlNodePtr node, GREETER_PARSER_ERROR_BAD_SPEC, "A label must specify the text attribute"); } + /* FIXME: evil hack to use internally translated strings */ + if (translation_score == 999 && + ! ve_string_empty (translated_text)) + { + char *foo = g_strdup (_(translated_text)); + g_free (translated_text); + translated_text = foo; + } for (i = 0; i < GREETER_ITEM_STATE_MAX; i++) { diff --git a/gui/greeter/greeter_session.c b/gui/greeter/greeter_session.c index f8d8e940..5ff5946b 100644 --- a/gui/greeter/greeter_session.c +++ b/gui/greeter/greeter_session.c @@ -8,6 +8,7 @@ #include <string.h> #include <gtk/gtk.h> +#include <libgnome/libgnome.h> #include "gdm.h" #include "gdmwm.h" diff --git a/gui/greeter/greeter_system.c b/gui/greeter/greeter_system.c index 62e7a871..803a5151 100644 --- a/gui/greeter/greeter_system.c +++ b/gui/greeter/greeter_system.c @@ -1,6 +1,7 @@ #include "config.h" #include <gtk/gtk.h> +#include <libgnome/libgnome.h> #include "greeter.h" #include "greeter_configuration.h" #include "greeter_system.h" @@ -164,7 +165,7 @@ greeter_system_handler (GreeterItemInfo *info, ret = gtk_dialog_run (GTK_DIALOG (dialog)); gdm_wm_no_login_focus_pop (); - if (ret == GTK_RESPONSE_CANCEL) + if (ret != GTK_RESPONSE_OK) { gtk_widget_destroy (dialog); return; diff --git a/gui/greeter/themes/circles/circles.xml.in b/gui/greeter/themes/circles/circles.xml.in index 49a54d16..3742e8e1 100644 --- a/gui/greeter/themes/circles/circles.xml.in +++ b/gui/greeter/themes/circles/circles.xml.in @@ -28,7 +28,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Option</_text> + <_text>_Language</_text> </item> </box> </item> @@ -47,7 +47,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Session</_text> + <_text>_Session</_text> </item> </box> </item> @@ -67,7 +67,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>System</_text> + <_text>S_ystem</_text> </item> </box> </item> @@ -87,7 +87,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Disconnect</_text> + <_text>D_isconnect</_text> <show modes="remote"/> </item> <item type="label"> @@ -95,7 +95,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Quit</_text> + <_text>_Quit</_text> <show modes="flexi"/> </item> </box> diff --git a/gui/greeter/themes/happygnome/happygnome.xml.in b/gui/greeter/themes/happygnome/happygnome.xml.in index c03908d4..d783e52c 100644 --- a/gui/greeter/themes/happygnome/happygnome.xml.in +++ b/gui/greeter/themes/happygnome/happygnome.xml.in @@ -28,7 +28,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Option</_text> + <_text>_Language</_text> </item> </box> </item> @@ -47,7 +47,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Session</_text> + <_text>_Session</_text> </item> </box> </item> @@ -67,7 +67,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>System</_text> + <_text>S_ystem</_text> </item> </box> </item> @@ -87,7 +87,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Disconnect</_text> + <_text>D_isconnect</_text> <show modes="remote"/> </item> <item type="label"> @@ -95,7 +95,7 @@ <prelight color="#666666" font="Sans 14"/> <active color="#ff0000" font="Sans 14"/> <pos y="50%" anchor="w"/> - <_text>Quit</_text> + <_text>_Quit</_text> <show modes="flexi"/> </item> </box> |