#if USE_GPGME
-#include <string.h>
-#include <sys/types.h>
-#include <sys/mman.h>
#include <glib.h>
+#include <glib/gi18n.h>
+#include <gdk/gdktypes.h>
#include <gdk/gdkkeysyms.h>
+#include <gdk/gdkdisplay.h>
+#ifdef GDK_WINDOWING_X11
+# include <gdk/gdkx.h>
+#endif /* GDK_WINDOWING_X11 */
#include <gtk/gtkmain.h>
#include <gtk/gtkwidget.h>
#include <gtk/gtkwindow.h>
#include <gtk/gtkbutton.h>
#include <gtk/gtkfilesel.h>
#include <gtk/gtksignal.h>
-#ifdef GDK_WINDOWING_X11
-#include <gdk/gdkx.h> /* GDK_DISPLAY() */
-#endif /* GDK_WINDOWING_X11 */
+#include <string.h>
+#include <sys/types.h>
+#include <sys/mman.h>
-#include "intl.h"
#include "passphrase.h"
#include "prefs_common.h"
#include "manage_window.h"
#include "utils.h"
#include "prefs_gpg.h"
-static int grab_all = 0;
+static gboolean grab_all = FALSE;
static gboolean pass_ack;
static gchar *last_pass = NULL;
static GtkWidget *create_description (const gchar *desc);
void
-gpgmegtk_set_passphrase_grab (gint yes)
+gpgmegtk_set_passphrase_grab(gint yes)
{
grab_all = yes;
}
{
gchar *the_passphrase = NULL;
GtkWidget *vbox;
- GtkWidget *table;
- GtkWidget *pass_label;
GtkWidget *confirm_box;
GtkWidget *window;
GtkWidget *pass_entry;
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), _("Passphrase"));
gtk_widget_set_size_request(window, 450, -1);
- gtk_container_set_border_width(GTK_CONTAINER(window), 4);
gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
vbox = gtk_vbox_new(FALSE, 8);
gtk_container_add(GTK_CONTAINER(window), vbox);
+ gtk_container_set_border_width(GTK_CONTAINER(vbox), 8);
if (desc) {
GtkWidget *label;
label = create_description (desc);
- gtk_box_pack_start (GTK_BOX(vbox), label, TRUE, TRUE, 0);
+ gtk_box_pack_start (GTK_BOX(vbox), label, FALSE, FALSE, 0);
}
- table = gtk_table_new(2, 2, FALSE);
- gtk_box_pack_start(GTK_BOX(vbox), table, FALSE, FALSE, 0);
- gtk_container_set_border_width(GTK_CONTAINER(table), 8);
- gtk_table_set_row_spacings(GTK_TABLE(table), 12);
- gtk_table_set_col_spacings(GTK_TABLE(table), 8);
-
-
- pass_label = gtk_label_new("");
- gtk_table_attach (GTK_TABLE(table), pass_label, 0, 1, 0, 1,
- GTK_FILL, GTK_EXPAND|GTK_FILL, 0, 0);
- gtk_misc_set_alignment (GTK_MISC (pass_label), 1, 0.5);
-
pass_entry = gtk_entry_new();
- gtk_table_attach (GTK_TABLE(table), pass_entry, 1, 2, 0, 1,
- GTK_EXPAND|GTK_SHRINK|GTK_FILL, 0, 0, 0);
- gtk_entry_set_visibility (GTK_ENTRY(pass_entry), FALSE);
- gtk_widget_grab_focus (pass_entry);
-
-
- confirm_box = gtk_hbutton_box_new ();
- gtk_button_box_set_layout (GTK_BUTTON_BOX(confirm_box), GTK_BUTTONBOX_END);
- gtk_box_set_spacing (GTK_BOX(confirm_box), 5);
-
- ok_button = gtk_button_new_with_label (_("OK"));
- GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
- gtk_box_pack_start (GTK_BOX(confirm_box), ok_button, TRUE, TRUE, 0);
-
- cancel_button = gtk_button_new_with_label (_("Cancel"));
- GTK_WIDGET_SET_FLAGS (cancel_button, GTK_CAN_DEFAULT);
- gtk_box_pack_start(GTK_BOX(confirm_box), cancel_button, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(vbox), pass_entry, FALSE, FALSE, 0);
+ gtk_entry_set_visibility(GTK_ENTRY(pass_entry), FALSE);
+ gtk_widget_grab_focus(pass_entry);
+ gtkut_stock_button_set_create(&confirm_box, &ok_button, GTK_STOCK_OK,
+ &cancel_button, GTK_STOCK_CANCEL,
+ NULL, NULL);
gtk_box_pack_end(GTK_BOX(vbox), confirm_box, FALSE, FALSE, 0);
- gtk_widget_grab_default (ok_button);
+ gtk_widget_grab_default(ok_button);
g_signal_connect(G_OBJECT(ok_button), "clicked",
G_CALLBACK(passphrase_ok_cb), NULL);
g_signal_connect(G_OBJECT(cancel_button), "clicked",
G_CALLBACK(passphrase_cancel_cb), NULL);
- if (grab_all)
- g_object_set (G_OBJECT(window), "type", GTK_WINDOW_POPUP, NULL);
gtk_window_set_position (GTK_WINDOW(window), GTK_WIN_POS_CENTER);
if (grab_all)
gtk_window_set_resizable(GTK_WINDOW(window), FALSE);
gtk_widget_show_all(window);
- /* don't use XIM on entering passphrase */
- gtkut_editable_disable_im(GTK_EDITABLE(pass_entry));
-
if (grab_all) {
-#ifdef GDK_WINDOWING_X11
- XGrabServer(GDK_DISPLAY());
-#endif /* GDK_WINDOWING_X11 */
- if ( grab_result = gdk_pointer_grab ( window->window, TRUE, 0,
- NULL, NULL, GDK_CURRENT_TIME)) {
-#ifdef GDK_WINDOWING_X11
- XUngrabServer ( GDK_DISPLAY() );
-#endif /* GDK_WINDOWING_X11 */
- g_warning ("OOPS: Could not grab mouse (grab status %d)\n",
- grab_result);
- gtk_widget_destroy (window);
- return NULL;
+ int err, cnt = 0;
+try_again:
+ /* make sure that window is viewable */
+ gtk_widget_show_now(window);
+ gdk_flush();
+ while(gtk_events_pending())
+ gtk_main_iteration();
+ if (err = gdk_pointer_grab(window->window, TRUE, 0,
+ window->window, NULL, GDK_CURRENT_TIME)) {
+ if (err == GDK_GRAB_NOT_VIEWABLE && cnt < 10) {
+ /* HACK! */
+ cnt++;
+ g_warning("trying to grab mouse again\n");
+ goto try_again;
+ } else {
+ g_warning("OOPS: Could not grab mouse (%d)\n", err);
+ gtk_widget_destroy(window);
+ return NULL;
+ }
}
- if ( grab_result = gdk_keyboard_grab( window->window, FALSE,
- GDK_CURRENT_TIME )) {
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
-#ifdef GDK_WINDOWING_X11
- XUngrabServer ( GDK_DISPLAY() );
-#endif /* GDK_WINDOWING_X11 */
- g_warning ("OOPS: Could not grab keyboard (grab status %d)\n",
- grab_result);
- gtk_widget_destroy (window);
+ if (gdk_keyboard_grab(window->window, FALSE, GDK_CURRENT_TIME)) {
+ gdk_display_pointer_ungrab(gdk_display_get_default(),
+ GDK_CURRENT_TIME);
+ g_warning("OOPS: Could not grab keyboard\n");
+ gtk_widget_destroy(window);
return NULL;
}
}
gtk_main();
if (grab_all) {
-#ifdef GDK_WINDOWING_X11
- XUngrabServer (GDK_DISPLAY());
-#endif /* GDK_WINDOWING_X11 */
- gdk_pointer_ungrab (GDK_CURRENT_TIME);
- gdk_keyboard_ungrab (GDK_CURRENT_TIME);
+ gdk_display_keyboard_ungrab(gdk_display_get_default(),
+ GDK_CURRENT_TIME);
+ gdk_display_pointer_ungrab(gdk_display_get_default(), GDK_CURRENT_TIME);
gdk_flush();
}
linelen (uid), uid, linelen (info), info);
label = gtk_label_new (buf);
+ gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);
g_free (buf);
return label;