printers: Make PpSamba a derivated class of PpHost

https://bugzilla.gnome.org/show_bug.cgi?id=760783
This commit is contained in:
Felipe Borges 2016-11-01 14:25:21 +01:00
parent d49182ea9f
commit e980b192d8
3 changed files with 17 additions and 35 deletions

View file

@ -30,7 +30,7 @@ struct _PpHostPrivate
gint port; gint port;
}; };
G_DEFINE_TYPE (PpHost, pp_host, G_TYPE_OBJECT); G_DEFINE_TYPE_WITH_PRIVATE (PpHost, pp_host, G_TYPE_OBJECT);
enum { enum {
PROP_0 = 0, PROP_0 = 0,
@ -113,8 +113,6 @@ pp_host_class_init (PpHostClass *klass)
{ {
GObjectClass *gobject_class = G_OBJECT_CLASS (klass); GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
g_type_class_add_private (klass, sizeof (PpHostPrivate));
gobject_class->set_property = pp_host_set_property; gobject_class->set_property = pp_host_set_property;
gobject_class->get_property = pp_host_get_property; gobject_class->get_property = pp_host_get_property;
gobject_class->finalize = pp_host_finalize; gobject_class->finalize = pp_host_finalize;

View file

@ -33,16 +33,13 @@
struct _PpSambaPrivate struct _PpSambaPrivate
{ {
GtkWindow *parent; GtkWindow *parent;
gchar *hostname;
}; };
G_DEFINE_TYPE (PpSamba, pp_samba, G_TYPE_OBJECT); G_DEFINE_TYPE (PpSamba, pp_samba, PP_TYPE_HOST);
enum enum
{ {
PROP_0 = 0, PROP_0 = 0,
PROP_HOSTNAME,
PROP_PARENT, PROP_PARENT,
}; };
@ -53,7 +50,6 @@ pp_samba_finalize (GObject *object)
priv = PP_SAMBA (object)->priv; priv = PP_SAMBA (object)->priv;
g_free (priv->hostname);
g_object_unref (priv->parent); g_object_unref (priv->parent);
G_OBJECT_CLASS (pp_samba_parent_class)->finalize (object); G_OBJECT_CLASS (pp_samba_parent_class)->finalize (object);
@ -69,9 +65,6 @@ pp_samba_get_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_HOSTNAME:
g_value_set_string (value, self->priv->hostname);
break;
case PROP_PARENT: case PROP_PARENT:
g_value_set_pointer (value, self->priv->parent); g_value_set_pointer (value, self->priv->parent);
break; break;
@ -93,10 +86,6 @@ pp_samba_set_property (GObject *object,
switch (prop_id) switch (prop_id)
{ {
case PROP_HOSTNAME:
g_free (self->priv->hostname);
self->priv->hostname = g_value_dup_string (value);
break;
case PROP_PARENT: case PROP_PARENT:
if (self->priv->parent) if (self->priv->parent)
g_object_unref (self->priv->parent); g_object_unref (self->priv->parent);
@ -121,16 +110,6 @@ pp_samba_class_init (PpSambaClass *klass)
gobject_class->get_property = pp_samba_get_property; gobject_class->get_property = pp_samba_get_property;
gobject_class->finalize = pp_samba_finalize; gobject_class->finalize = pp_samba_finalize;
/*
* Used for searching on specific host.
*/
g_object_class_install_property (gobject_class, PROP_HOSTNAME,
g_param_spec_string ("hostname",
"Hostname",
"The hostname to search",
NULL,
G_PARAM_READWRITE));
/* /*
* Used for authentication dialog. * Used for authentication dialog.
*/ */
@ -459,15 +438,12 @@ _pp_samba_get_devices_thread (GSimpleAsyncResult *res,
GObject *object, GObject *object,
GCancellable *cancellable) GCancellable *cancellable)
{ {
PpSambaPrivate *priv;
static GMutex mutex; static GMutex mutex;
PpSamba *samba = PP_SAMBA (object);
SMBData *data; SMBData *data;
SMBCCTX *smb_context; SMBCCTX *smb_context;
gchar *dirname; gchar *dirname;
gchar *path; gchar *path;
gchar *hostname = NULL;
priv = samba->priv;
data = g_simple_async_result_get_op_res_gpointer (res); data = g_simple_async_result_get_op_res_gpointer (res);
data->devices = g_new0 (PpDevicesList, 1); data->devices = g_new0 (PpDevicesList, 1);
@ -482,10 +458,13 @@ _pp_samba_get_devices_thread (GSimpleAsyncResult *res,
{ {
smbc_setOptionUserData (smb_context, data); smbc_setOptionUserData (smb_context, data);
if (priv->hostname) g_object_get (object, "hostname", &hostname, NULL);
if (hostname != NULL)
{ {
dirname = g_strdup_printf ("smb://%s", priv->hostname); dirname = g_strdup_printf ("smb://%s", hostname);
path = g_strdup_printf ("//%s", priv->hostname); path = g_strdup_printf ("//%s", hostname);
g_free (hostname);
} }
else else
{ {
@ -516,12 +495,15 @@ pp_samba_get_devices_async (PpSamba *samba,
GSimpleAsyncResult *res; GSimpleAsyncResult *res;
PpSambaPrivate *priv = samba->priv; PpSambaPrivate *priv = samba->priv;
SMBData *data; SMBData *data;
gchar *hostname = NULL;
g_object_get (G_OBJECT (samba), "hostname", &hostname, NULL);
res = g_simple_async_result_new (G_OBJECT (samba), callback, user_data, pp_samba_get_devices_async); res = g_simple_async_result_new (G_OBJECT (samba), callback, user_data, pp_samba_get_devices_async);
data = g_new0 (SMBData, 1); data = g_new0 (SMBData, 1);
data->devices = NULL; data->devices = NULL;
data->context = g_main_context_default (); data->context = g_main_context_default ();
data->hostname_set = priv->hostname != NULL; data->hostname_set = hostname != NULL;
data->parent = g_object_ref (priv->parent); data->parent = g_object_ref (priv->parent);
data->auth_if_needed = auth_if_needed; data->auth_if_needed = auth_if_needed;
@ -529,6 +511,7 @@ pp_samba_get_devices_async (PpSamba *samba,
g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify) smb_data_free); g_simple_async_result_set_op_res_gpointer (res, data, (GDestroyNotify) smb_data_free);
g_simple_async_result_run_in_thread (res, _pp_samba_get_devices_thread, 0, cancellable); g_simple_async_result_run_in_thread (res, _pp_samba_get_devices_thread, 0, cancellable);
g_free (hostname);
g_object_unref (res); g_object_unref (res);
} }

View file

@ -21,6 +21,7 @@
#ifndef __PP_SAMBA_H__ #ifndef __PP_SAMBA_H__
#define __PP_SAMBA_H__ #define __PP_SAMBA_H__
#include "pp-host.h"
#include "pp-utils.h" #include "pp-utils.h"
G_BEGIN_DECLS G_BEGIN_DECLS
@ -38,13 +39,13 @@ typedef struct _PpSambaPrivate PpSambaPrivate;
struct _PpSamba struct _PpSamba
{ {
GObject parent_instance; PpHost parent_instance;
PpSambaPrivate *priv; PpSambaPrivate *priv;
}; };
struct _PpSambaClass struct _PpSambaClass
{ {
GObjectClass parent_class; PpHostClass parent_class;
}; };
GType pp_samba_get_type (void) G_GNUC_CONST; GType pp_samba_get_type (void) G_GNUC_CONST;