summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog24
-rw-r--r--gui/gdmlogin.c5
-rw-r--r--gui/greeter/greeter.h2
-rw-r--r--gui/greeter/greeter_action_language.c1
-rw-r--r--gui/greeter/greeter_canvas_item.c41
-rw-r--r--gui/greeter/greeter_events.c33
-rw-r--r--gui/greeter/greeter_events.h9
-rw-r--r--gui/greeter/greeter_geometry.c4
-rw-r--r--gui/greeter/greeter_item.c29
-rw-r--r--gui/greeter/greeter_item_clock.c2
-rw-r--r--gui/greeter/greeter_item_pam.c6
-rw-r--r--gui/greeter/greeter_parser.c12
-rw-r--r--gui/greeter/greeter_session.c1
-rw-r--r--gui/greeter/greeter_system.c3
-rw-r--r--gui/greeter/themes/circles/circles.xml.in10
-rw-r--r--gui/greeter/themes/happygnome/happygnome.xml.in10
16 files changed, 152 insertions, 40 deletions
diff --git a/ChangeLog b/ChangeLog
index a1011e9b..432393f3 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>