gnome-mud r816 - in trunk: . src ui
- From: lharris svn gnome org
- To: svn-commits-list gnome org
- Subject: gnome-mud r816 - in trunk: . src ui
- Date: Fri, 20 Mar 2009 08:01:09 +0000 (UTC)
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">●</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]