vinagre r285 - in branches/unstable: . data src
- From: jwendell svn gnome org
- To: svn-commits-list gnome org
- Subject: vinagre r285 - in branches/unstable: . data src
- Date: Thu, 10 Apr 2008 01:46:21 +0100 (BST)
Author: jwendell
Date: Thu Apr 10 01:46:20 2008
New Revision: 285
URL: http://svn.gnome.org/viewvc/vinagre?rev=285&view=rev
Log:
2008-04-09 Jonh Wendell <jwendell gnome org>
Show avahi-found hosts in side panel and bookmark menu. Closes #512918.
* configure.ac:
- Bump avahi dependency to 0.6.22
- Avahi dependency is mandatory now
- Also depends on avahi-gobject
* src/vinagre-mdns.[ch]: New files, mdns class
* vinagre-window.[ch],
* vinagre-fav.c: Make use of new mdns class
Added:
branches/unstable/src/vinagre-mdns.c
branches/unstable/src/vinagre-mdns.h
Modified:
branches/unstable/ (props changed)
branches/unstable/ChangeLog
branches/unstable/configure.ac
branches/unstable/data/vinagre-ui.xml
branches/unstable/src/ (props changed)
branches/unstable/src/Makefile.am
branches/unstable/src/vinagre-bookmarks.c
branches/unstable/src/vinagre-commands.c
branches/unstable/src/vinagre-connect.c
branches/unstable/src/vinagre-fav.c
branches/unstable/src/vinagre-window-private.h
branches/unstable/src/vinagre-window.c
branches/unstable/src/vinagre-window.h
Modified: branches/unstable/configure.ac
==============================================================================
--- branches/unstable/configure.ac (original)
+++ branches/unstable/configure.ac Thu Apr 10 01:46:20 2008
@@ -39,6 +39,7 @@
GCONF_REQUIRED=2.16.0
GTHREAD_REQUIRED=2.0.0
GTK_VNC_REQUIRED=0.3.4
+AVAHI_REQUIRED=0.6.22
PKG_CHECK_MODULES(VINAGRE, \
glib-2.0 >= $GLIB_REQUIRED \
@@ -48,7 +49,9 @@
gconf-2.0 >= $GCONF_REQUIRED \
gthread-2.0 >= $GTHREAD_REQUIRED \
gnome-keyring-1 \
- gtk-vnc-1.0 >= $GTK_VNC_REQUIRED)
+ gtk-vnc-1.0 >= $GTK_VNC_REQUIRED \
+ avahi-ui >= $AVAHI_REQUIRED \
+ avahi-gobject >= $AVAHI_REQUIRED)
AC_SUBST(VINAGRE_CFLAGS)
AC_SUBST(VINAGRE_LIBS)
@@ -60,32 +63,6 @@
AM_GCONF_SOURCE_2
-#*******************************************************************************
-# Check for Avahi
-#*******************************************************************************
-
-AVAHI_REQUIRED=0.6.18
-
-AC_ARG_ENABLE(avahi,
- AS_HELP_STRING([--enable-avahi],[Enable use of avahi]),
- [case "${enableval}" in
- yes) VINAGRE_ENABLE_AVAHI=yes ;;
- no) VINAGRE_ENABLE_AVAHI=no ;;
- *) AC_MSG_ERROR(bad value ${enableval} for --enable-avahi) ;;
- esac],
- [VINAGRE_ENABLE_AVAHI=no])
-
-AVAHI_CFLAGS=
-AVAHI_LIBS=
-if test "x$VINAGRE_ENABLE_AVAHI" = "xyes" ; then
- PKG_CHECK_MODULES(AVAHI,
- [avahi-ui >= $AVAHI_REQUIRED])
- AVAHI_CFLAGS="$AVAHI_CFLAGS -DVINAGRE_HAVE_AVAHI"
-fi
-AC_SUBST(AVAHI_CFLAGS)
-AC_SUBST(AVAHI_LIBS)
-AM_CONDITIONAL(VINAGRE_AVAHI, [test "x$VINAGRE_ENABLE_AVAHI" = "xyes"])
-
dnl define a MAINT-like variable REBUILD which is set
dnl if Perl, so autogenerated sources can be rebuilt
AC_PATH_PROGS(PERL, perl5 perl)
@@ -121,6 +98,4 @@
Compiler ...................: ${CC}
Compiler Flags .............: ${CFLAGS}
-
- Avahi support ..............: ${VINAGRE_ENABLE_AVAHI}
"
Modified: branches/unstable/data/vinagre-ui.xml
==============================================================================
--- branches/unstable/data/vinagre-ui.xml (original)
+++ branches/unstable/data/vinagre-ui.xml Thu Apr 10 01:46:20 2008
@@ -51,6 +51,8 @@
<menuitem name="BookmarksDelMenu" action="BookmarksDel"/>
<separator/>
<placeholder name="BookmarksList"/>
+ <separator/>
+ <placeholder name="AvahiList"/>
</menu>
<menu name="HelpMenu" action="Help">
Modified: branches/unstable/src/Makefile.am
==============================================================================
--- branches/unstable/src/Makefile.am (original)
+++ branches/unstable/src/Makefile.am Thu Apr 10 01:46:20 2008
@@ -9,7 +9,6 @@
-DVINAGRE_DATADIR=\""$(datadir)/vinagre"\" \
-DPACKAGE_LOCALE_DIR=\""$(datadir)/locale"\" \
$(VINAGRE_CFLAGS) \
- $(AVAHI_CFLAGS) \
$(NULL)
bin_PROGRAMS = vinagre
@@ -29,12 +28,12 @@
vinagre-ui.h vinagre-window-private.h \
vinagre-enums.h vinagre-enums.c \
gossip-cell-renderer-expander.c gossip-cell-renderer-expander.h \
+ vinagre-mdns.h vinagre-mdns.c \
$(NULL)
vinagre_LDADD = \
$(VINAGRE_LIBS) \
$(GTKVNC_LIBS) \
- $(AVAHI_LIBS) \
$(NULL)
vinagre_enum_headers = \
Modified: branches/unstable/src/vinagre-bookmarks.c
==============================================================================
--- branches/unstable/src/vinagre-bookmarks.c (original)
+++ branches/unstable/src/vinagre-bookmarks.c Thu Apr 10 01:46:20 2008
@@ -42,7 +42,7 @@
};
#define VINAGRE_BOOKMARKS_FILE "vinagre.bookmarks"
-#define VINAGRE_CONNECTION_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), VINAGRE_TYPE_CONNECTION, VinagreConnectionPrivate))
+
G_DEFINE_TYPE (VinagreBookmarks, vinagre_bookmarks, G_TYPE_OBJECT);
static VinagreBookmarks *book_singleton = NULL;
Modified: branches/unstable/src/vinagre-commands.c
==============================================================================
--- branches/unstable/src/vinagre-commands.c (original)
+++ branches/unstable/src/vinagre-commands.c Thu Apr 10 01:46:20 2008
@@ -263,7 +263,7 @@
conn = vinagre_tab_get_conn (VINAGRE_TAB (tab));
g_return_if_fail (VINAGRE_IS_CONNECTION (conn));
- vinagre_bookmarks_add (window->priv->book,
+ vinagre_bookmarks_add (vinagre_bookmarks_get_default (),
conn,
GTK_WINDOW (window));
@@ -283,7 +283,7 @@
g_return_if_fail (VINAGRE_IS_WINDOW (window));
g_return_if_fail (VINAGRE_IS_CONNECTION (window->priv->fav_conn_selected));
- vinagre_bookmarks_edit (window->priv->book,
+ vinagre_bookmarks_edit (vinagre_bookmarks_get_default (),
window->priv->fav_conn_selected,
GTK_WINDOW (window));
}
@@ -295,7 +295,7 @@
g_return_if_fail (VINAGRE_IS_WINDOW (window));
g_return_if_fail (VINAGRE_IS_CONNECTION (window->priv->fav_conn_selected));
- vinagre_bookmarks_del (window->priv->book,
+ vinagre_bookmarks_del (vinagre_bookmarks_get_default (),
window->priv->fav_conn_selected,
GTK_WINDOW (window));
}
Modified: branches/unstable/src/vinagre-connect.c
==============================================================================
--- branches/unstable/src/vinagre-connect.c (original)
+++ branches/unstable/src/vinagre-connect.c Thu Apr 10 01:46:20 2008
@@ -22,19 +22,12 @@
#include <glib/gi18n.h>
#include <glib.h>
#include <glade/glade.h>
+#include <avahi-ui/avahi-ui.h>
#include "vinagre-connect.h"
#include "vinagre-utils.h"
#include "vinagre-bookmarks.h"
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#ifdef VINAGRE_HAVE_AVAHI
-#include <avahi-ui/avahi-ui.h>
-#endif
-
typedef struct {
GladeXML *xml;
GtkWidget *dialog;
@@ -43,7 +36,6 @@
GtkWidget *find_button;
} VinagreConnectDialog;
-#ifdef VINAGRE_HAVE_AVAHI
static void
vinagre_connect_find_button_cb (GtkButton *button,
VinagreConnectDialog *dialog)
@@ -73,7 +65,6 @@
gtk_widget_destroy (d);
}
-#endif
VinagreConnection *vinagre_connect (VinagreWindow *window)
{
@@ -91,13 +82,11 @@
dialog.port_entry = glade_xml_get_widget (dialog.xml, "port_entry");
dialog.find_button = glade_xml_get_widget (dialog.xml, "find_button");
-#ifdef VINAGRE_HAVE_AVAHI
gtk_widget_show (dialog.find_button);
g_signal_connect (dialog.find_button,
"clicked",
G_CALLBACK (vinagre_connect_find_button_cb),
&dialog);
-#endif
gtk_widget_show_all (dialog.dialog);
result = gtk_dialog_run (GTK_DIALOG (dialog.dialog));
@@ -109,7 +98,7 @@
gtk_widget_hide (GTK_WIDGET (dialog.dialog));
- conn = vinagre_bookmarks_exists (vinagre_window_get_bookmarks (window),
+ conn = vinagre_bookmarks_exists (vinagre_bookmarks_get_default (),
host,
port);
if (!conn)
Modified: branches/unstable/src/vinagre-fav.c
==============================================================================
--- branches/unstable/src/vinagre-fav.c (original)
+++ branches/unstable/src/vinagre-fav.c Thu Apr 10 01:46:20 2008
@@ -26,6 +26,7 @@
#include "vinagre-fav.h"
#include "vinagre-utils.h"
#include "vinagre-bookmarks.h"
+#include "vinagre-mdns.h"
#include "vinagre-window-private.h"
#include "gossip-cell-renderer-expander.h"
@@ -56,6 +57,7 @@
CONN_COL,
IS_FOLDER_COL,
IS_GROUP_COL,
+ IS_AVAHI_COL,
NUM_COLS
};
@@ -198,15 +200,20 @@
{
GtkTreeIter iter;
VinagreConnection *conn = NULL;
+ gboolean avahi;
if (gtk_tree_selection_get_selected (selection, NULL, &iter))
{
gtk_tree_model_get (fav->priv->model,
&iter,
- CONN_COL, &conn,
+ CONN_COL, &conn,
+ IS_AVAHI_COL, &avahi,
-1);
}
+ if (avahi)
+ conn = NULL;
+
/* Emits the signal saying that user has selected a bookmark */
g_signal_emit (G_OBJECT (fav),
signals[FAV_SELECTED],
@@ -317,7 +324,7 @@
{
GtkTreePath *path = NULL;
GtkTreeIter iter;
- gboolean folder, group;
+ gboolean folder, group, avahi;
if (!((GDK_BUTTON_PRESS == event->type) && (3 == event->button)))
return FALSE;
@@ -338,8 +345,9 @@
&iter,
IS_FOLDER_COL, &folder,
IS_GROUP_COL, &group,
+ IS_AVAHI_COL, &avahi,
-1);
- if (folder || group)
+ if (folder || group || avahi)
{
gtk_tree_path_free (path);
return FALSE;
@@ -375,7 +383,7 @@
GtkTooltip *tooltip,
VinagreFav *fav)
{
- gchar *tip;
+ gchar *tip, *name;
GtkTreePath *path = NULL;
gint bx, by;
GtkTreeIter iter;
@@ -408,13 +416,17 @@
if (folder || group)
return FALSE;
- tip = g_markup_printf_escaped ("<b>%s</b> %s\n"
- "<b>%s</b> %d",
+ name = vinagre_connection_get_best_name (conn);
+ tip = g_markup_printf_escaped ("<b>%s</b>\n"
+ "<small><b>%s</b> %s</small>\n"
+ "<small><b>%s</b> %d</small>",
+ name,
_("Host:"), vinagre_connection_get_host (conn),
_("Port:"), vinagre_connection_get_port (conn));
gtk_tooltip_set_markup (tooltip, tip);
g_free (tip);
+ g_free (name);
return TRUE;
}
@@ -606,6 +618,7 @@
G_TYPE_STRING,
VINAGRE_TYPE_CONNECTION,
G_TYPE_BOOLEAN,
+ G_TYPE_BOOLEAN,
G_TYPE_BOOLEAN));
fav->priv->tree = gtk_tree_view_new_with_model (fav->priv->model);
@@ -711,6 +724,10 @@
"changed",
G_CALLBACK (vinagre_fav_update_list),
fav);
+ g_signal_connect_swapped (vinagre_mdns_get_default (),
+ "changed",
+ G_CALLBACK (vinagre_fav_update_list),
+ fav);
}
GtkWidget *
@@ -737,6 +754,7 @@
store = GTK_TREE_STORE (fav->priv->model);
gtk_tree_store_clear (store);
+ /* bookmarks */
list = vinagre_bookmarks_get_all (vinagre_bookmarks_get_default ());
gtk_tree_store_append (store, &parent_iter, NULL);
@@ -744,6 +762,7 @@
NAME_COL, _("Bookmarks"),
IS_GROUP_COL, TRUE,
IS_FOLDER_COL, FALSE,
+ IS_AVAHI_COL, FALSE,
-1);
for (l = list; l; l = next)
@@ -766,6 +785,7 @@
CONN_COL, conn,
IS_FOLDER_COL, FALSE,
IS_GROUP_COL, FALSE,
+ IS_AVAHI_COL, FALSE,
-1);
if (name)
g_free (name);
@@ -777,6 +797,51 @@
gtk_tree_view_expand_row (GTK_TREE_VIEW (fav->priv->tree), path, FALSE);
g_free (path);
+ /* avahi */
+ list = vinagre_mdns_get_all (vinagre_mdns_get_default ());
+ if (!list)
+ return FALSE;
+
+ gtk_tree_store_append (store, &parent_iter, NULL);
+ gtk_tree_store_set (store, &parent_iter,
+ NAME_COL, _("Hosts near to me"),
+ IS_GROUP_COL, TRUE,
+ IS_FOLDER_COL, FALSE,
+ IS_AVAHI_COL, FALSE,
+ -1);
+
+ for (l = list; l; l = next)
+ {
+ gchar *name = NULL;
+ VinagreConnection *conn;
+
+ next = l->next;
+
+ conn = (VinagreConnection *) l->data;
+ g_assert (VINAGRE_IS_CONNECTION (conn));
+
+ name = vinagre_connection_get_best_name (conn);
+ pixbuf = vinagre_connection_get_icon (conn);
+
+ gtk_tree_store_append (store, &iter, &parent_iter);
+ gtk_tree_store_set (store, &iter,
+ IMAGE_COL, pixbuf,
+ NAME_COL, name,
+ CONN_COL, conn,
+ IS_FOLDER_COL, FALSE,
+ IS_GROUP_COL, FALSE,
+ IS_AVAHI_COL, TRUE,
+ -1);
+ if (name)
+ g_free (name);
+ if (pixbuf != NULL)
+ g_object_unref (pixbuf);
+ }
+
+ path = gtk_tree_path_new_from_string ("1");
+ gtk_tree_view_expand_row (GTK_TREE_VIEW (fav->priv->tree), path, FALSE);
+ g_free (path);
+
return FALSE;
}
/* vim: ts=8 */
Added: branches/unstable/src/vinagre-mdns.c
==============================================================================
--- (empty file)
+++ branches/unstable/src/vinagre-mdns.c Thu Apr 10 01:46:20 2008
@@ -0,0 +1,243 @@
+/*
+ * vinagre-mdns.c
+ * This file is part of vinagre
+ *
+ * Copyright (C) Jonh Wendell 2008 <wendell bani com br>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "vinagre-mdns.h"
+#include "vinagre-connection.h"
+#include <avahi-gobject/ga-service-browser.h>
+#include <avahi-gobject/ga-service-resolver.h>
+#include <glib/gi18n.h>
+
+struct _VinagreMdnsPrivate
+{
+ GSList *conns;
+ GaServiceBrowser *browser;
+ GaClient *client;
+};
+
+enum
+{
+ MDNS_CHANGED,
+ LAST_SIGNAL
+};
+
+G_DEFINE_TYPE (VinagreMdns, vinagre_mdns, G_TYPE_OBJECT);
+
+static VinagreMdns *mdns_singleton = NULL;
+static guint signals[LAST_SIGNAL] = { 0 };
+
+static void
+mdns_resolver_found (GaServiceResolver *resolver,
+ AvahiIfIndex iface,
+ GaProtocol proto,
+ gchar *name,
+ gchar *type,
+ gchar *domain,
+ gchar *host_name,
+ AvahiAddress *a,
+ gint port,
+ AvahiStringList *txt,
+ GaLookupResultFlags flags,
+ VinagreMdns *mdns)
+{
+ VinagreConnection *conn;
+
+ conn = vinagre_connection_new ();
+ g_object_set (conn,
+ "name", name,
+ "port", port,
+ "host", host_name,
+ NULL);
+
+ mdns->priv->conns = g_slist_prepend (mdns->priv->conns, conn);
+
+ g_object_unref (resolver);
+
+ g_signal_emit (mdns, signals[MDNS_CHANGED], 0);
+}
+
+static void
+mdns_resolver_failure (GaServiceResolver *resolver,
+ GError *error,
+ VinagreMdns *mdns)
+{
+ g_warning ("%s", error->message);
+ g_object_unref (resolver);
+}
+
+static void
+mdns_browser_new_cb (GaServiceBrowser *browser,
+ AvahiIfIndex iface,
+ GaProtocol proto,
+ gchar *name,
+ gchar *type,
+ gchar *domain,
+ GaLookupResultFlags flags,
+ VinagreMdns *mdns)
+{
+ GaServiceResolver *resolver;
+ GError *error = NULL;
+
+ resolver = ga_service_resolver_new (iface,
+ proto,
+ name,
+ type,
+ domain,
+ GA_PROTOCOL_UNSPEC,
+ GA_LOOKUP_NO_FLAGS);
+
+ g_signal_connect (resolver,
+ "found",
+ G_CALLBACK (mdns_resolver_found),
+ mdns);
+ g_signal_connect (resolver,
+ "failure",
+ G_CALLBACK (mdns_resolver_failure),
+ mdns);
+
+ if (!ga_service_resolver_attach (resolver,
+ mdns->priv->client,
+ &error))
+ {
+ g_warning (_("Failed to resolve avahi hostname: %s\n"), error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+mdns_browser_del_cb (GaServiceBrowser *browser,
+ AvahiIfIndex iface,
+ GaProtocol proto,
+ gchar *name,
+ gchar *type,
+ gchar *domain,
+ GaLookupResultFlags flags,
+ VinagreMdns *mdns)
+{
+ GSList *l;
+
+ for (l = mdns->priv->conns; l; l = l->next)
+ {
+ VinagreConnection *conn = VINAGRE_CONNECTION (l->data);
+ if (strcmp (vinagre_connection_get_name (conn), name) == 0)
+ {
+ g_object_unref (conn);
+ mdns->priv->conns = g_slist_remove (mdns->priv->conns, conn);
+ g_signal_emit (mdns, signals[MDNS_CHANGED], 0);
+ return;
+ }
+ }
+}
+
+static void
+vinagre_mdns_init (VinagreMdns *mdns)
+{
+ GError *error = NULL;
+
+ mdns->priv = G_TYPE_INSTANCE_GET_PRIVATE (mdns, VINAGRE_TYPE_MDNS, VinagreMdnsPrivate);
+
+ mdns->priv->conns = NULL;
+ mdns->priv->browser = ga_service_browser_new ("_rfb._tcp");
+ mdns->priv->client = ga_client_new (GA_CLIENT_FLAG_NO_FLAGS);
+
+ g_signal_connect (mdns->priv->browser,
+ "new-service",
+ G_CALLBACK (mdns_browser_new_cb),
+ mdns);
+ g_signal_connect (mdns->priv->browser,
+ "removed-service",
+ G_CALLBACK (mdns_browser_del_cb),
+ mdns);
+
+ if (!ga_client_start (mdns->priv->client, &error))
+ {
+ g_warning (_("Failed to browse for hosts: %s\n"), error->message);
+ g_error_free (error);
+ return;
+ }
+
+ if (!ga_service_browser_attach (mdns->priv->browser,
+ mdns->priv->client,
+ &error))
+ {
+ g_warning (_("Failed to browse for hosts: %s\n"), error->message);
+ g_error_free (error);
+ }
+}
+
+static void
+vinagre_mdns_clear_conns (VinagreMdns *mdns)
+{
+ g_slist_foreach (mdns->priv->conns, (GFunc) g_object_unref, NULL);
+ g_slist_free (mdns->priv->conns);
+
+ mdns->priv->conns = NULL;
+}
+
+static void
+vinagre_mdns_finalize (GObject *object)
+{
+ VinagreMdns *mdns = VINAGRE_MDNS (object);
+
+ g_object_unref (mdns->priv->browser);
+ g_object_unref (mdns->priv->client);
+
+ vinagre_mdns_clear_conns (mdns);
+
+ G_OBJECT_CLASS (vinagre_mdns_parent_class)->finalize (object);
+}
+
+static void
+vinagre_mdns_class_init (VinagreMdnsClass *klass)
+{
+ GObjectClass* object_class = G_OBJECT_CLASS (klass);
+ GObjectClass* parent_class = G_OBJECT_CLASS (klass);
+
+ g_type_class_add_private (klass, sizeof (VinagreMdnsPrivate));
+
+ object_class->finalize = vinagre_mdns_finalize;
+
+ signals[MDNS_CHANGED] =
+ g_signal_new ("changed",
+ G_OBJECT_CLASS_TYPE (object_class),
+ G_SIGNAL_RUN_FIRST,
+ G_STRUCT_OFFSET (VinagreMdnsClass, changed),
+ NULL, NULL,
+ g_cclosure_marshal_VOID__VOID,
+ G_TYPE_NONE,
+ 0);
+
+}
+
+VinagreMdns *
+vinagre_mdns_get_default (void)
+{
+ if (G_UNLIKELY (!mdns_singleton))
+ mdns_singleton = VINAGRE_MDNS (g_object_new (VINAGRE_TYPE_MDNS,
+ NULL));
+ return mdns_singleton;
+}
+
+GSList *
+vinagre_mdns_get_all (VinagreMdns *mdns)
+{
+ g_return_val_if_fail (VINAGRE_IS_MDNS (mdns), NULL);
+
+ return mdns->priv->conns;
+}
Added: branches/unstable/src/vinagre-mdns.h
==============================================================================
--- (empty file)
+++ branches/unstable/src/vinagre-mdns.h Thu Apr 10 01:46:20 2008
@@ -0,0 +1,62 @@
+/*
+ * vinagre-mdns.h
+ * This file is part of vinagre
+ *
+ * Copyright (C) Jonh Wendell 2008 <wendell bani com br>
+ *
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License as published by the
+ * Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+ * See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _VINAGRE_MDNS_H_
+#define _VINAGRE_MDNS_H_
+
+#include <glib-object.h>
+#include <glib.h>
+
+G_BEGIN_DECLS
+
+#define VINAGRE_TYPE_MDNS (vinagre_mdns_get_type ())
+#define VINAGRE_MDNS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), VINAGRE_TYPE_MDNS, VinagreMdns))
+#define VINAGRE_MDNS_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), VINAGRE_TYPE_MDNS, VinagreMdnsClass))
+#define VINAGRE_IS_MDNS(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), VINAGRE_TYPE_MDNS))
+#define VINAGRE_IS_MDNS_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), VINAGRE_TYPE_MDNS))
+#define VINAGRE_MDNS_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), VINAGRE_TYPE_MDNS, VinagreMdnsClass))
+
+typedef struct _VinagreMdnsClass VinagreMdnsClass;
+typedef struct _VinagreMdns VinagreMdns;
+typedef struct _VinagreMdnsPrivate VinagreMdnsPrivate;
+
+struct _VinagreMdnsClass
+{
+ GObjectClass parent_class;
+
+ /* Signals */
+ void (* changed) (VinagreMdns *mdns);
+};
+
+struct _VinagreMdns
+{
+ GObject parent_instance;
+ VinagreMdnsPrivate *priv;
+};
+
+GType vinagre_mdns_get_type (void) G_GNUC_CONST;
+
+VinagreMdns *vinagre_mdns_get_default (void);
+GSList *vinagre_mdns_get_all (VinagreMdns *mdns);
+
+G_END_DECLS
+
+#endif /* _VINAGRE_MDNS_H_ */
+/* vim: ts=8 */
Modified: branches/unstable/src/vinagre-window-private.h
==============================================================================
--- branches/unstable/src/vinagre-window-private.h (original)
+++ branches/unstable/src/vinagre-window-private.h Thu Apr 10 01:46:20 2008
@@ -23,7 +23,6 @@
#include "vinagre-window.h"
#include "vinagre-connection.h"
-#include "vinagre-bookmarks.h"
G_BEGIN_DECLS
@@ -56,7 +55,6 @@
GtkWidget *active_tab;
VinagreConnection *fav_conn_selected;
- VinagreBookmarks *book;
gint width;
gint height;
Modified: branches/unstable/src/vinagre-window.c
==============================================================================
--- branches/unstable/src/vinagre-window.c (original)
+++ branches/unstable/src/vinagre-window.c Thu Apr 10 01:46:20 2008
@@ -36,6 +36,7 @@
#include "vinagre-utils.h"
#include "vinagre-bookmarks.h"
#include "vinagre-ui.h"
+#include "vinagre-mdns.h"
#include "vinagre-window-private.h"
@@ -542,8 +543,8 @@
{
VinagreWindowPrivate *p = window->priv;
GList *actions, *l;
- GSList *favs;
- gint n, i;
+ GSList *favs, *mdnss;
+ gint n, m, i;
guint id;
g_return_if_fail (p->bookmarks_list_action_group != NULL);
@@ -562,12 +563,13 @@
}
g_list_free (actions);
- /* Get the bookmarks from file */
- favs = vinagre_bookmarks_get_all (window->priv->book);
+ favs = vinagre_bookmarks_get_all (vinagre_bookmarks_get_default ());
+ mdnss = vinagre_mdns_get_all (vinagre_mdns_get_default ());
n = g_slist_length (favs);
+ m = g_slist_length (mdnss);
i = 0;
- id = (n > 0) ? gtk_ui_manager_new_merge_id (p->manager) : 0;
+ id = (n > 0||m > 0) ? gtk_ui_manager_new_merge_id (p->manager) : 0;
while (favs)
{
@@ -617,6 +619,56 @@
i++;
}
+ /* avahi */
+ i = 0;
+ while (mdnss)
+ {
+ VinagreConnection *conn;
+ gchar *action_name, *action_label;
+ GtkAction *action;
+ gchar *name, *tooltip;
+
+ conn = (VinagreConnection *) mdnss->data;
+ g_assert (VINAGRE_IS_CONNECTION (conn));
+
+ name = vinagre_connection_get_best_name (conn);
+
+ action_name = g_strdup_printf ("Avahi_%d", i);
+ /* Translators: This is server:port, a statusbar tooltip when mouse is over a bookmark item on menu */
+ tooltip = g_strdup_printf (_("Open %s:%d"),
+ vinagre_connection_get_host (conn),
+ vinagre_connection_get_port (conn));
+ action_label = vinagre_utils_escape_underscores (name, -1);
+ action = gtk_action_new (action_name,
+ action_label,
+ tooltip,
+ NULL);
+ g_object_set (G_OBJECT (action), "icon-name", "application-x-vnc", NULL);
+ g_object_set_data (G_OBJECT (action), "conn", conn);
+ gtk_action_group_add_action (p->bookmarks_list_action_group,
+ GTK_ACTION (action));
+ g_signal_connect (action,
+ "activate",
+ G_CALLBACK (vinagre_cmd_bookmarks_open),
+ window);
+
+ gtk_ui_manager_add_ui (p->manager,
+ id,
+ "/MenuBar/BookmarksMenu/AvahiList",
+ action_name, action_name,
+ GTK_UI_MANAGER_MENUITEM,
+ FALSE);
+
+ g_object_unref (action);
+ g_free (action_name);
+ g_free (action_label);
+ g_free (name);
+ g_free (tooltip);
+
+ mdnss = mdnss->next;
+ i++;
+ }
+
p->bookmarks_list_menu_ui_id = id;
}
@@ -905,8 +957,6 @@
window->priv->fullscreen = FALSE;
window->priv->signal_notebook = 0;
- window->priv->book = vinagre_bookmarks_get_default ();
-
main_box = gtk_vbox_new (FALSE, 0);
gtk_container_add (GTK_CONTAINER (window), main_box);
gtk_widget_show (main_box);
@@ -939,7 +989,11 @@
vinagre_window_update_machine_menu_sensitivity (window);
vinagre_window_update_bookmarks_list_menu (window);
- g_signal_connect_swapped (window->priv->book,
+ g_signal_connect_swapped (vinagre_bookmarks_get_default (),
+ "changed",
+ G_CALLBACK (vinagre_window_update_bookmarks_list_menu),
+ window);
+ g_signal_connect_swapped (vinagre_mdns_get_default (),
"changed",
G_CALLBACK (vinagre_window_update_bookmarks_list_menu),
window);
@@ -1081,15 +1135,6 @@
return VINAGRE_TAB (window->priv->active_tab);
}
-VinagreBookmarks *
-vinagre_window_get_bookmarks (VinagreWindow *window)
-{
- g_return_val_if_fail (VINAGRE_IS_WINDOW (window), NULL);
-
- return window->priv->book;
-}
-
-
GtkUIManager *
vinagre_window_get_ui_manager (VinagreWindow *window)
{
Modified: branches/unstable/src/vinagre-window.h
==============================================================================
--- branches/unstable/src/vinagre-window.h (original)
+++ branches/unstable/src/vinagre-window.h Thu Apr 10 01:46:20 2008
@@ -79,7 +79,6 @@
GtkWidget *vinagre_window_get_notebook (VinagreWindow *window);
GtkActionGroup *vinagre_window_get_main_action (VinagreWindow *window);
GtkActionGroup *vinagre_window_get_sensitive_action (VinagreWindow *window);
-VinagreBookmarks *vinagre_window_get_bookmarks (VinagreWindow *window);
void vinagre_window_update_bookmarks_list_menu (VinagreWindow *window);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]