gnome-mud r816 - in trunk: . src ui



Author: lharris
Date: Fri Mar 20 08:01:09 2009
New Revision: 816
URL: http://svn.gnome.org/viewvc/gnome-mud?rev=816&view=rev

Log:
Added hidden password entry used when the server sets local echo to off.

Modified:
   trunk/ChangeLog
   trunk/src/mud-connection-view.c
   trunk/src/mud-window.c
   trunk/src/mud-window.h
   trunk/ui/main.glade

Modified: trunk/src/mud-connection-view.c
==============================================================================
--- trunk/src/mud-connection-view.c	(original)
+++ trunk/src/mud-connection-view.c	Fri Mar 20 08:01:09 2009
@@ -755,7 +755,10 @@
             new_boolean = g_value_get_boolean(value);
 
             if(new_boolean != self->local_echo)
+            {
                 self->local_echo = new_boolean;
+                mud_window_toggle_input_mode(self->window, self);
+            }
             break;
 
         case PROP_MUD_NAME:

Modified: trunk/src/mud-window.c
==============================================================================
--- trunk/src/mud-window.c	(original)
+++ trunk/src/mud-window.c	Fri Mar 20 08:01:09 2009
@@ -51,6 +51,7 @@
     GtkWidget *notebook;
     GtkWidget *textview;
     GtkWidget *textviewscroll;
+    GtkWidget *password_entry;
 
     GtkWidget *startlog;
     GtkWidget *stoplog;
@@ -125,6 +126,9 @@
 static gboolean mud_window_textview_keypress(GtkWidget *widget,
                                              GdkEventKey *event, 
                                              MudWindow *self);
+static gboolean mud_window_entry_keypress(GtkWidget *widget,
+                                          GdkEventKey *event, 
+                                          MudWindow *self);
 static void mud_window_notebook_page_change(GtkNotebook *notebook, 
                                             GtkNotebookPage *page, 
                                             gint arg, 
@@ -238,6 +242,7 @@
     self->priv->textviewscroll = glade_xml_get_widget(glade, "text_view_scroll");
     self->priv->textview = glade_xml_get_widget(glade, "text_view");
     self->priv->image = glade_xml_get_widget(glade, "image");
+    self->priv->password_entry = glade_xml_get_widget(glade, "password_entry");
 
     /* connect quit buttons */
     g_signal_connect(self->window,
@@ -336,6 +341,11 @@
                      G_CALLBACK(mud_window_textview_keypress),
                      self);
 
+    g_signal_connect(self->priv->password_entry,
+                     "key_press_event",
+                     G_CALLBACK(mud_window_entry_keypress),
+                     self);
+
     g_signal_connect(
             gtk_text_view_get_buffer(GTK_TEXT_VIEW(self->priv->textview)),
             "changed",
@@ -472,7 +482,11 @@
                                gpointer user_data)
 {
     MudWindow *self = MUD_WINDOW(user_data);
-    gtk_widget_grab_focus(self->priv->textview);
+
+    if(GTK_WIDGET_VISIBLE(self->priv->textview))
+        gtk_widget_grab_focus(self->priv->textview);
+    else
+        gtk_widget_grab_focus(self->priv->password_entry);
 
     return TRUE;
 }
@@ -596,6 +610,31 @@
     return FALSE;
 }
 
+static gboolean
+mud_window_entry_keypress(GtkWidget *widget,
+                          GdkEventKey *event,
+                          MudWindow *self)
+{
+    const gchar *text;
+
+    if ((event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) &&
+            (event->state & gtk_accelerator_get_default_mod_mask()) == 0)
+    {
+        if (self->priv->current_view)
+        {
+            text = gtk_entry_get_text(GTK_ENTRY(self->priv->password_entry));
+
+            mud_connection_view_send(self->priv->current_view, text);
+
+            gtk_entry_set_text(GTK_ENTRY(self->priv->password_entry), "");
+        }
+
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
 static void
 mud_window_notebook_page_change(GtkNotebook *notebook, GtkNotebookPage *page, gint arg, MudWindow *self)
 {
@@ -661,7 +700,12 @@
         gtk_widget_set_sensitive(self->priv->toolbar_reconnect, FALSE);
     }
 
-    gtk_widget_grab_focus(self->priv->textview);
+    mud_window_toggle_input_mode(self, self->priv->current_view);
+
+    if(GTK_WIDGET_VISIBLE(self->priv->textview))
+        gtk_widget_grab_focus(self->priv->textview);
+    else
+        gtk_widget_grab_focus(self->priv->password_entry);
 }
 
 static void
@@ -756,7 +800,10 @@
         g_object_unref(buf);
     }
 
-    gtk_widget_grab_focus(self->priv->textview);
+    if(GTK_WIDGET_VISIBLE(self->priv->textview))
+        gtk_widget_grab_focus(self->priv->textview);
+    else
+        gtk_widget_grab_focus(self->priv->password_entry);
 
     return FALSE;
 }
@@ -963,6 +1010,43 @@
 
 /* Public Methods */
 void
+mud_window_toggle_input_mode(MudWindow *self,
+                             MudConnectionView *view)
+{
+    gboolean local_echo;
+
+    g_return_if_fail(IS_MUD_WINDOW(self));
+
+    /* Don't want to log a critical when a view unrefs */
+    if(!IS_MUD_CONNECTION_VIEW(view))
+        return;
+
+    if(g_direct_equal(self->priv->current_view, view))
+    {
+        g_object_get(view, "local-echo", &local_echo, NULL);
+
+        if(local_echo)
+        {
+            gtk_widget_hide(self->priv->password_entry);
+
+            gtk_widget_show(self->priv->textviewscroll);
+            gtk_widget_show(self->priv->textview);
+
+            gtk_widget_grab_focus(self->priv->textview);
+        }
+        else
+        {
+            gtk_widget_show(self->priv->password_entry);
+
+            gtk_widget_hide(self->priv->textviewscroll);
+            gtk_widget_hide(self->priv->textview);
+
+            gtk_widget_grab_focus(self->priv->password_entry);
+        }
+    }
+}
+
+void
 mud_window_close_current_window(MudWindow *self)
 {
     g_return_if_fail(IS_MUD_WINDOW(self));

Modified: trunk/src/mud-window.h
==============================================================================
--- trunk/src/mud-window.h	(original)
+++ trunk/src/mud-window.h	Fri Mar 20 08:01:09 2009
@@ -24,7 +24,6 @@
 G_BEGIN_DECLS
 
 #include <gtk/gtk.h>
-#include "mud-tray.h"
 
 #define MUD_TYPE_WINDOW             (mud_window_get_type ())
 #define MUD_WINDOW(object)          (G_TYPE_CHECK_INSTANCE_CAST ((object), MUD_TYPE_WINDOW, MudWindow))
@@ -38,6 +37,9 @@
 typedef struct _MudWindowClass      MudWindowClass;
 typedef struct _MudWindowPrivate    MudWindowPrivate;
 
+#include "mud-connection-view.h"
+#include "mud-tray.h"
+
 struct _MudWindowClass
 {
     GObjectClass parent_class;
@@ -62,6 +64,7 @@
 void mud_window_profile_menu_set_active(MudWindow *window, gchar *name);
 void mud_window_close_current_window(MudWindow *window);
 void mud_window_disconnected(MudWindow *window);
+void mud_window_toggle_input_mode(MudWindow *window, MudConnectionView *view);
 
 G_END_DECLS
 

Modified: trunk/ui/main.glade
==============================================================================
--- trunk/ui/main.glade	(original)
+++ trunk/ui/main.glade	Fri Mar 20 08:01:09 2009
@@ -347,6 +347,16 @@
                         <property name="position">0</property>
                       </packing>
                     </child>
+                    <child>
+                      <widget class="GtkEntry" id="password_entry">
+                        <property name="can_focus">True</property>
+                        <property name="visibility">False</property>
+                        <property name="invisible_char">&#x25CF;</property>
+                      </widget>
+                      <packing>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
                   </widget>
                   <packing>
                     <property name="position">0</property>



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]