[Goodies-commits] r3586 - xfvnc/trunk/xfvnc

Brian Tarricone kelnos at xfce.org
Mon Nov 12 02:14:08 CET 2007


Author: kelnos
Date: 2007-11-12 01:14:08 +0000 (Mon, 12 Nov 2007)
New Revision: 3586

Modified:
   xfvnc/trunk/xfvnc/main.c
Log:
refactor some stuff, set vnc window's max size to remote display size


Modified: xfvnc/trunk/xfvnc/main.c
===================================================================
--- xfvnc/trunk/xfvnc/main.c	2007-11-11 19:57:02 UTC (rev 3585)
+++ xfvnc/trunk/xfvnc/main.c	2007-11-12 01:14:08 UTC (rev 3586)
@@ -25,6 +25,10 @@
 #include <stdlib.h>
 #endif
 
+#ifdef HAVE_STRING_H
+#include <string.h>
+#endif
+
 #include <gtk/gtk.h>
 #include <glade/glade.h>
 
@@ -49,16 +53,30 @@
     guint32 view_only:1,
             allow_other:1,
             fullscreen:1;
-} XfvncRecentServer;
+} XfvncServerInfo;
 
+typedef struct
+{
+    GladeXML *gxml;
+    
+    GtkWidget *vnc_window;
+    GtkWidget *vnc_window_sw;
+    GtkWidget *vnc;
+    
+    guint pulse_id;
+    
+    XfvncServerInfo server;
+} XfvncData;
+
+
 static void
 vnc_connected(VncDisplay *vnc,
               gpointer user_data)
 {
-    GladeXML *gxml = user_data;
+    XfvncData *xfvnc = user_data;
     GtkWidget *lbl_progress;
     
-    lbl_progress = glade_xml_get_widget(gxml, "progress_label");
+    lbl_progress = glade_xml_get_widget(xfvnc->gxml, "progress_label");
     gtk_label_set_text(GTK_LABEL(lbl_progress),
                        _("Connected.  Starting session..."));
 }
@@ -67,16 +85,15 @@
 vnc_initialized(VncDisplay *vnc,
                 gpointer user_data)
 {
-    GladeXML *gxml = user_data;
-    GtkWidget *win, /**sw,*/ *connect_win, *progress_dlg, *chk_fullscreen;
-    guint pulse_id;
+    XfvncData *xfvnc = user_data;
+    GladeXML *gxml = xfvnc->gxml;
+    GtkWidget *connect_win, *progress_dlg, *chk_fullscreen;
     gboolean fullscreen;
     gchar *title;
     
     progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
-    pulse_id = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(progress_dlg),
-                                "pulse-timeout-id"));
-    g_source_remove(pulse_id);
+    g_source_remove(xfvnc->pulse_id);
+    xfvnc->pulse_id = 0;
     gtk_widget_destroy(progress_dlg);
     
     chk_fullscreen = glade_xml_get_widget(gxml, "chk_fullscreen");
@@ -85,14 +102,13 @@
     connect_win = glade_xml_get_widget(gxml, "connect_window");
     gtk_widget_destroy(connect_win);
     
-    win = glade_xml_get_widget(gxml, "vnc_window");
     title = g_strdup_printf(_("XfVNC .:. %s"), vnc_display_get_name(vnc));
-    gtk_window_set_title(GTK_WINDOW(win), title);
+    gtk_window_set_title(GTK_WINDOW(xfvnc->vnc_window), title);
     g_free(title);
-    gtk_widget_show_all(win);
+    gtk_widget_show_all(xfvnc->vnc_window);
     
     if(fullscreen)
-        gtk_window_fullscreen(GTK_WINDOW(win));
+        gtk_window_fullscreen(GTK_WINDOW(xfvnc->vnc_window));
     
 #if 0
     /* this is super-lame */
@@ -123,10 +139,9 @@
 vnc_disconnected(VncDisplay *vnc,
                  gpointer user_data)
 {
-    GladeXML *gxml = user_data;
-    GtkWidget *win = glade_xml_get_widget(gxml, "vnc_window");
+    XfvncData *xfvnc = user_data;
     
-    xfce_message_dialog(GTK_WINDOW(win), _("Disconnected"),
+    xfce_message_dialog(GTK_WINDOW(xfvnc->vnc_window), _("Disconnected"),
                         GTK_STOCK_DIALOG_ERROR,
                         _("The remote VNC session was disconnected"),
                         _("The connection with the VNC server was lost.  This could be due to a network problem, or a problem with the server."),
@@ -140,9 +155,14 @@
                  const gchar *message,
                  gpointer user_data)
 {
-    GladeXML *gxml = user_data;
-    GtkWidget *progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
+    XfvncData *xfvnc = user_data;
+    GtkWidget *progress_dlg = glade_xml_get_widget(xfvnc->gxml, "progress_dlg");
     
+    if(xfvnc->pulse_id) {
+        g_source_remove(xfvnc->pulse_id);
+        xfvnc->pulse_id = 0;
+    }
+    
     xfce_message_dialog(GTK_WINDOW(progress_dlg), _("Connection Error"),
                         GTK_STOCK_DIALOG_ERROR,
                         _("There was an error connecting to the VNC server"),
@@ -158,11 +178,19 @@
                    gint height,
                    gpointer user_data)
 {
-    GladeXML *gxml = user_data;
-    GtkWidget *win;
+    XfvncData *xfvnc = user_data;
+    GdkGeometry geom = { 0, };
     
-    win = glade_xml_get_widget(gxml, "vnc_window");
-    gtk_window_resize(GTK_WINDOW(win), width, height);
+    TRACE("entering (%d,%d)", width, height);
+    
+    geom.max_width = width;
+    geom.max_height = height;
+    /* FIXME: why doesn't it work to pass |vnc| as the geometry widget? */
+    gtk_window_set_geometry_hints(GTK_WINDOW(xfvnc->vnc_window),
+                                  xfvnc->vnc_window_sw, &geom,
+                                  GDK_HINT_MAX_SIZE);
+    
+    gtk_window_resize(GTK_WINDOW(xfvnc->vnc_window), width, height);
 }
 
 static gboolean
@@ -177,27 +205,24 @@
 progress_cancel_clicked(GtkWidget *widget,
                         gpointer user_data)
 {
-    GladeXML *gxml = user_data;
-    GtkWidget *progress_dlg, *win, *vnc, *btn;
-    guint pulse_id;
-    
+    XfvncData *xfvnc = user_data;
+    GladeXML *gxml = xfvnc->gxml;
+    GtkWidget *progress_dlg, *btn;
+
     progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
-    pulse_id = GPOINTER_TO_UINT(g_object_get_data(G_OBJECT(progress_dlg),
-                                                  "pulse-timeout-id"));
-    g_source_remove(pulse_id);
+    g_source_remove(xfvnc->pulse_id);
+    xfvnc->pulse_id = 0;
     gtk_widget_hide(progress_dlg);
     
-    win = glade_xml_get_widget(gxml, "vnc_window");
-    vnc = g_object_get_data(G_OBJECT(win), "vnc-display");
-    g_object_unref(G_OBJECT(vnc));
-    gtk_widget_destroy(vnc);
-    g_object_set_data(G_OBJECT(win), "vnc-display", NULL);
-    gtk_widget_hide(win);
+    g_object_unref(G_OBJECT(xfvnc->vnc));
+    gtk_widget_destroy(xfvnc->vnc);
+    xfvnc->vnc = NULL;
+    gtk_widget_hide(xfvnc->vnc_window);
     
     btn = glade_xml_get_widget(gxml, "btn_progress_cancel");
     g_signal_handlers_disconnect_by_func(G_OBJECT(btn),
                                          G_CALLBACK(progress_cancel_clicked),
-                                         gxml);
+                                         xfvnc);
 }
 
 static gboolean
@@ -205,9 +230,9 @@
                         GdkEventAny *event,
                         gpointer user_data)
 {
-    GtkWidget *vnc = g_object_get_data(G_OBJECT(widget), "vnc-display");
+    XfvncData *xfvnc = user_data;
     
-    g_signal_handlers_disconnect_by_func(G_OBJECT(vnc),
+    g_signal_handlers_disconnect_by_func(G_OBJECT(xfvnc->vnc),
                                          G_CALLBACK(vnc_disconnected),
                                          user_data);
     
@@ -218,57 +243,59 @@
 connect_clicked(GtkWidget *widget,
                 gpointer user_data)
 {
-    GladeXML *gxml = user_data;
+    XfvncData *xfvnc = user_data;
+    GladeXML *gxml = xfvnc->gxml;
     GtkWidget *win, *sw, *vnc, *entry_host, *entry_displaynum, *entry_password;
     GtkWidget *progress_dlg;
-    gchar *host, *dnum, *pass, *port;
-    guint pulse_id;
+    gchar *dnum, *port, *password;
     
     entry_host = glade_xml_get_widget(gxml, "entry_host");
-    host = gtk_editable_get_chars(GTK_EDITABLE(entry_host), 0, -1);
+    xfvnc->server.hostname = gtk_editable_get_chars(GTK_EDITABLE(entry_host),
+                                                    0, -1);
     entry_displaynum = glade_xml_get_widget(gxml, "entry_displaynum");
     dnum = gtk_editable_get_chars(GTK_EDITABLE(entry_displaynum), 0, -1);
     entry_password = glade_xml_get_widget(gxml, "entry_password");
-    pass = gtk_editable_get_chars(GTK_EDITABLE(entry_password), 0, -1);
+    password = gtk_editable_get_chars(GTK_EDITABLE(entry_password), 0, -1);
     
-    port = g_strdup_printf("%d", 5900 + atoi(dnum));
+    xfvnc->server.display_num = atoi(dnum);
+    port = g_strdup_printf("%d", 5900 + xfvnc->server.display_num);
     g_free(dnum);
     
-    win = glade_xml_get_widget(gxml, "vnc_window");
+    xfvnc->vnc_window = win = glade_xml_get_widget(gxml, "vnc_window");
     gtk_widget_set_name(win, "xfvnc-nothick-window");
     gtk_widget_realize(win);
     g_signal_connect(G_OBJECT(win), "delete-event",
-                     G_CALLBACK(vnc_window_delete_event), gxml);
+                     G_CALLBACK(vnc_window_delete_event), xfvnc);
     
-    sw = glade_xml_get_widget(gxml, "vnc_window_sw");
+    xfvnc->vnc_window_sw = sw = glade_xml_get_widget(gxml, "vnc_window_sw");
     gtk_widget_show(sw);
     
-    vnc = vnc_display_new();
+    xfvnc->vnc = vnc = vnc_display_new();
     vnc_display_set_use_shm(VNC_DISPLAY(vnc), TRUE);
     vnc_display_set_pointer_local(VNC_DISPLAY(vnc), TRUE);
     vnc_display_set_pointer_grab(VNC_DISPLAY(vnc), FALSE);
     vnc_display_set_keyboard_grab(VNC_DISPLAY(vnc), FALSE);
     vnc_display_set_credential(VNC_DISPLAY(vnc),
                                VNC_DISPLAY_CREDENTIAL_CLIENTNAME,
-                               "XfVNC");
+                               "XfVNC " VERSION);
     vnc_display_set_credential(VNC_DISPLAY(vnc),
                                VNC_DISPLAY_CREDENTIAL_PASSWORD,
-                               pass);
-    vnc_display_open_host(VNC_DISPLAY(vnc), host, port);
+                               password);
+    vnc_display_open_host(VNC_DISPLAY(vnc), xfvnc->server.hostname, port);
     gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(sw), vnc);
     gtk_widget_realize(vnc);
     g_object_set_data(G_OBJECT(win), "vnc-display",
                       g_object_ref(G_OBJECT(vnc)));
     g_signal_connect(G_OBJECT(vnc), "vnc-connected",
-                     G_CALLBACK(vnc_connected), gxml);
+                     G_CALLBACK(vnc_connected), xfvnc);
     g_signal_connect(G_OBJECT(vnc), "vnc-initialized",
-                     G_CALLBACK(vnc_initialized), gxml);
+                     G_CALLBACK(vnc_initialized), xfvnc);
     g_signal_connect(G_OBJECT(vnc), "vnc-disconnected",
-                     G_CALLBACK(vnc_disconnected), gxml);
+                     G_CALLBACK(vnc_disconnected), xfvnc);
     g_signal_connect(G_OBJECT(vnc), "vnc-auth-failure",
-                     G_CALLBACK(vnc_auth_failure),gxml);
+                     G_CALLBACK(vnc_auth_failure), xfvnc);
     g_signal_connect(G_OBJECT(vnc), "vnc-desktop-resize",
-                     G_CALLBACK(vnc_desktop_resize), gxml);
+                     G_CALLBACK(vnc_desktop_resize), xfvnc);
     g_signal_connect(G_OBJECT(vnc), "vnc-keyboard-grab",
                      G_CALLBACK(vnc_display_set_keyboard_grab),
                      GUINT_TO_POINTER(FALSE));
@@ -276,20 +303,16 @@
                      G_CALLBACK(vnc_display_set_pointer_grab),
                      GUINT_TO_POINTER(FALSE));
     
-    g_free(host);
-    g_free(port);
-    g_free(pass);
+    g_free(password);
     
     progress_dlg = glade_xml_get_widget(gxml, "progress_dlg");
     gtk_widget_show_all(progress_dlg);
     g_signal_connect(G_OBJECT(glade_xml_get_widget(gxml,
                                                    "btn_progress_cancel")),
-                     "clicked", G_CALLBACK(progress_cancel_clicked), gxml);
+                     "clicked", G_CALLBACK(progress_cancel_clicked), xfvnc);
     
-    pulse_id = g_timeout_add(150, progress_pulse,
-                             glade_xml_get_widget(gxml, "pbar"));
-    g_object_set_data(G_OBJECT(progress_dlg), "pulse-timeout-id",
-                      GUINT_TO_POINTER(pulse_id));
+    xfvnc->pulse_id = g_timeout_add(150, progress_pulse,
+                                    glade_xml_get_widget(gxml, "pbar"));
 }
 
 static void
@@ -315,7 +338,7 @@
     gboolean got_one = FALSE;
     gchar *recent_file = NULL, groupbuf[128], *fullhost;
     XfceRc *rcfile = NULL;
-    XfvncRecentServer *rs;
+    XfvncServerInfo *si;
     gint nrecent, i;
     GtkListStore *ls;
     
@@ -345,24 +368,24 @@
             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);
+        si = g_new0(XfvncServerInfo, 1);
+        si->hostname = g_strdup(xfce_rc_read_entry(rcfile, "hostname", NULL));
+        if(!si->hostname || !*si->hostname) {
+            g_free(si->hostname);
+            g_free(si);
             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);
+        si->display_num = xfce_rc_read_int_entry(rcfile, "display_num", 0);
+        si->view_only = xfce_rc_read_bool_entry(rcfile, "view_only", FALSE);
+        si->allow_other = xfce_rc_read_bool_entry(rcfile, "allow_other", FALSE);
+        si->fullscreen = xfce_rc_read_bool_entry(rcfile, "fullscreen", FALSE);
         
-        fullhost = g_strdup_printf("%s:%d", rs->hostname, rs->display_num);
+        fullhost = g_strdup_printf("%s:%d", si->hostname, si->display_num);
         
         gtk_list_store_append(ls, &iter);
         gtk_list_store_set(ls, &iter,
                            0, fullhost,
-                           1, rs,
+                           1, si,
                            -1);
         g_free(fullhost);
         got_one = TRUE;
@@ -380,10 +403,10 @@
 recent_combo_changed(GtkComboBox *combo,
                      gpointer user_data)
 {
-    GladeXML *gxml = user_data;
+    XfvncData *xfvnc = user_data;
     GtkTreeIter iter;
     GtkTreeModel *model;
-    XfvncRecentServer *rs = NULL;
+    XfvncServerInfo *si = NULL;
     gchar dispbuf[32];
     
     if(!gtk_combo_box_get_active_iter(combo, &iter))
@@ -391,37 +414,39 @@
     
     model = gtk_combo_box_get_model(combo);
     gtk_tree_model_get(model, &iter,
-                       1, &rs,
+                       1, &si,
                        -1);
-    if(!rs)
+    if(!si)
         return;
     
-    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_host")),
-                       rs->hostname);
+    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(xfvnc->gxml,
+                                                      "entry_host")),
+                       si->hostname);
     
-    g_snprintf(dispbuf, sizeof(dispbuf), "%d", rs->display_num);
-    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml,
+    g_snprintf(dispbuf, sizeof(dispbuf), "%d", si->display_num);
+    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(xfvnc->gxml,
                                                       "entry_displaynum")),
                        dispbuf);
     
-    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(gxml, "entry_password")),
-                       "");
+    gtk_entry_set_text(GTK_ENTRY(glade_xml_get_widget(xfvnc->gxml,
+                                                      "entry_password")), "");
     
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xfvnc->gxml,
                                                                         "chk_viewonly")),
-                                 rs->view_only);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+                                 si->view_only);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xfvnc->gxml,
                                                                         "chk_allowother")),
-                                 rs->allow_other);
-    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(gxml,
+                                 si->allow_other);
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(glade_xml_get_widget(xfvnc->gxml,
                                                                         "chk_fullscreen")),
-                                 rs->fullscreen);
+                                 si->fullscreen);
 }
 
 int
 main(int argc,
      char **argv)
 {
+    XfvncData xfvnc;
     GladeXML *gxml;
     GtkWidget *connect_window, *combo_recent;
     
@@ -430,8 +455,11 @@
     gtk_init(&argc, &argv);
     gtk_rc_parse_string(rcstyle);
     
-    gxml = glade_xml_new_from_buffer(xfvnc_glade, xfvnc_glade_length,
-                                     NULL, NULL);
+    memset(&xfvnc, 0, sizeof(xfvnc));
+    
+    xfvnc.gxml = gxml = glade_xml_new_from_buffer(xfvnc_glade,
+                                                  xfvnc_glade_length,
+                                                  NULL, NULL);
     if(!gxml) {
         g_error("Unable to parse embedded glade UI description.");
         return 1;
@@ -442,12 +470,12 @@
     connect_window = glade_xml_get_widget(gxml, "connect_window");
     gtk_widget_show_all(connect_window);
     g_signal_connect(G_OBJECT(glade_xml_get_widget(gxml, "btn_connect")),
-                     "clicked", G_CALLBACK(connect_clicked), gxml);
+                     "clicked", G_CALLBACK(connect_clicked), &xfvnc);
     
     combo_recent = glade_xml_get_widget(gxml, "combo_recent");
     make_text_combo(GTK_COMBO_BOX(combo_recent));
     g_signal_connect(G_OBJECT(combo_recent), "changed",
-                     G_CALLBACK(recent_combo_changed), gxml);
+                     G_CALLBACK(recent_combo_changed), &xfvnc);
     if(load_recent_servers(GTK_COMBO_BOX(combo_recent))) {
         gtk_combo_box_set_active(GTK_COMBO_BOX(combo_recent), 0);
         gtk_widget_grab_focus(glade_xml_get_widget(gxml, "entry_password"));




More information about the Goodies-commits mailing list