[Goodies-commits] r3489 - xfvnc/trunk/xfvnc
Brian Tarricone
kelnos at xfce.org
Fri Nov 2 10:27:18 CET 2007
Author: kelnos
Date: 2007-11-02 09:27:18 +0000 (Fri, 02 Nov 2007)
New Revision: 3489
Modified:
xfvnc/trunk/xfvnc/main.c
xfvnc/trunk/xfvnc/xfvnc.glade
Log:
change comboboxentry to just combobox, implement reading of recent servers
list (doesn't save yet tho)
Modified: xfvnc/trunk/xfvnc/main.c
===================================================================
--- xfvnc/trunk/xfvnc/main.c 2007-11-02 08:54:16 UTC (rev 3488)
+++ xfvnc/trunk/xfvnc/main.c 2007-11-02 09:27:18 UTC (rev 3489)
@@ -33,6 +33,14 @@
#include <vncdisplay.h>
+typedef struct
+{
+ gchar *hostname;
+ guint display_num;
+ guint32 view_only:1,
+ allow_other:1,
+ fullscreen:1;
+} XfvncRecentServer;
static void
vnc_connected(VncDisplay *vnc,
@@ -205,13 +213,140 @@
GUINT_TO_POINTER(pulse_id));
}
+static void
+make_text_combo(GtkComboBox *combo)
+{
+ GtkCellRenderer *render;
+ GtkListStore *ls;
+
+ ls = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_POINTER);
+ gtk_combo_box_set_model(combo, GTK_TREE_MODEL(ls));
+ g_object_unref(G_OBJECT(ls));
+
+ render = gtk_cell_renderer_text_new();
+ gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), render, TRUE);
+ gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), render,
+ "text", 0,
+ NULL);
+}
+
+/* yes, i know i could use GtkRecentManager and whatnot, but this is
+ * just as easy and doesn't require a really recent gtk */
+static gboolean
+load_recent_servers(GtkComboBox *combo)
+{
+ gboolean ret = FALSE;
+ gchar *recent_file = NULL, groupbuf[128], *fullhost;
+ XfceRc *rcfile = NULL;
+ XfvncRecentServer *rs;
+ gint nrecent, i;
+ GtkListStore *ls;
+
+ recent_file = xfce_resource_save_location(XFCE_RESOURCE_CONFIG,
+ "xfvnc/xfvnc-history.rc",
+ FALSE);
+ if(!recent_file)
+ goto out;
+
+ rcfile = xfce_rc_simple_open(recent_file, TRUE);
+ if(!rcfile)
+ goto out;
+
+ if(!xfce_rc_has_group(rcfile, "global"))
+ goto out;
+ xfce_rc_set_group(rcfile, "global");
+ nrecent = xfce_rc_read_int_entry(rcfile, "nrecent", 0);
+
+ ls = GTK_LIST_STORE(gtk_combo_box_get_model(combo));
+
+ for(i = 0; i < nrecent; ++i) {
+ GtkTreeIter iter;
+
+ g_snprintf(groupbuf, sizeof(groupbuf), "recent%d", i);
+
+ if(!xfce_rc_has_group(rcfile, groupbuf))
+ continue;
+ xfce_rc_set_group(rcfile, groupbuf);
+
+ rs = g_new0(XfvncRecentServer, 1);
+ rs->hostname = g_strdup(xfce_rc_read_entry(rcfile, "hostname", NULL));
+ if(!rs->hostname || !*rs->hostname) {
+ g_free(rs->hostname);
+ g_free(rs);
+ continue;
+ }
+ rs->display_num = xfce_rc_read_int_entry(rcfile, "display_num", 0);
+ rs->view_only = xfce_rc_read_bool_entry(rcfile, "view_only", FALSE);
+ rs->allow_other = xfce_rc_read_bool_entry(rcfile, "allow_other", FALSE);
+ rs->fullscreen = xfce_rc_read_bool_entry(rcfile, "fullscreen", FALSE);
+
+ fullhost = g_strdup_printf("%s:%d", rs->hostname, rs->display_num);
+
+ gtk_list_store_append(ls, &iter);
+ gtk_list_store_set(ls, &iter,
+ 0, fullhost,
+ 1, rs,
+ -1);
+ g_free(fullhost);
+ }
+
+out:
+ if(rcfile)
+ xfce_rc_close(rcfile);
+ g_free(recent_file);
+
+ return ret;
+}
+
+static void
+recent_combo_changed(GtkComboBox *combo,
+ gpointer user_data)
+{
+ GladeXML *gxml = user_data;
+ GtkTreeIter iter;
+ GtkTreeModel *model;
+ XfvncRecentServer *rs = NULL;
+ gchar dispbuf[32];
+
+ if(!gtk_combo_box_get_active_iter(combo, &iter))
+ return;
+
+ model = gtk_combo_box_get_model(combo);
+ gtk_tree_model_get(model, &iter,
+ 1, &rs,
+ -1);
+ if(!rs)
+ return;
+
+ gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_host")),
+ rs->hostname);
+
+ g_snprintf(dispbuf, sizeof(dispbuf), "%d", rs->display_num);
+ gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml,
+ "entry_displaynum")),
+ dispbuf);
+
+ gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_password")),
+ "");
+
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+ "chk_viewonly")),
+ rs->view_only);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+ "chk_allowother")),
+ rs->allow_other);
+ gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+ "chk_fullscreen")),
+ rs->fullscreen);
+}
+
int
main(int argc,
char **argv)
{
GladeXML *gxml;
gchar *glade_file;
- GtkWidget *connect_window;
+ GtkWidget *connect_window, *combo_recent, *entry_host;
xfce_textdomain(GETTEXT_PACKAGE, LOCALEDIR, "UTF-8");
@@ -225,6 +360,7 @@
g_error("Unable to load xfvnc.glade");
return 1;
}
+ g_free(glade_file);
glade_xml_signal_autoconnect(gxml);
@@ -233,8 +369,15 @@
g_signal_connect(G_OBJECT(glade_xml_get_widget(gxml, "btn_connect")),
"clicked", G_CALLBACK(connect_clicked), gxml);
- g_free(glade_file);
+ combo_recent = glade_xml_get_widget(gxml, "combo_recent");
+ make_text_combo(GTK_COMBO_BOX(combo_recent));
+ load_recent_servers(GTK_COMBO_BOX(combo_recent));
+ g_signal_connect(G_OBJECT(combo_recent), "changed",
+ G_CALLBACK(recent_combo_changed), gxml);
+ entry_host = glade_xml_get_widget(gxml, "entry_host");
+ gtk_widget_grab_focus(entry_host);
+
gtk_main();
g_object_unref(G_OBJECT(gxml));
Modified: xfvnc/trunk/xfvnc/xfvnc.glade
===================================================================
--- xfvnc/trunk/xfvnc/xfvnc.glade 2007-11-02 08:54:16 UTC (rev 3488)
+++ xfvnc/trunk/xfvnc/xfvnc.glade 2007-11-02 09:27:18 UTC (rev 3489)
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE glade-interface SYSTEM "glade-2.0.dtd">
-<!--Generated with glade3 3.2.2 on Fri Nov 2 01:40:52 2007 by brian at kepler-->
+<!--Generated with glade3 3.2.2 on Fri Nov 2 01:58:13 2007 by brian at kepler-->
<glade-interface>
<widget class="GtkWindow" id="connect_window">
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
@@ -21,7 +21,7 @@
<widget class="GtkLabel" id="label1">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <property name="label" translatable="yes">_Recent servers:</property>
+ <property name="label" translatable="yes">_Recent computers:</property>
<property name="use_underline">True</property>
<property name="mnemonic_widget">comboboxentry1</property>
</widget>
@@ -31,16 +31,10 @@
</packing>
</child>
<child>
- <widget class="GtkComboBoxEntry" id="comboboxentry1">
+ <widget class="GtkComboBox" id="combo_recent">
<property name="visible">True</property>
<property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- <child internal-child="entry">
- <widget class="GtkEntry" id="comboboxentry-entry1">
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="events">GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK</property>
- </widget>
- </child>
+ <property name="focus_on_click">False</property>
</widget>
<packing>
<property name="position">1</property>
More information about the Goodies-commits
mailing list