diff options
-rw-r--r-- | src/trg-client.c | 18 | ||||
-rw-r--r-- | src/trg-client.h | 2 | ||||
-rw-r--r-- | src/trg-main-window.c | 8 | ||||
-rw-r--r-- | src/trg-status-bar.c | 34 | ||||
-rw-r--r-- | src/trg-status-bar.h | 1 |
5 files changed, 51 insertions, 12 deletions
diff --git a/src/trg-client.c b/src/trg-client.c index db5a051..bd1119b 100644 --- a/src/trg-client.c +++ b/src/trg-client.c @@ -36,6 +36,13 @@ G_DEFINE_TYPE (TrgClient, trg_client, G_TYPE_OBJECT) +enum { + TC_SESSION_UPDATED, + TC_SIGNAL_COUNT +}; + +static guint signals[TC_SIGNAL_COUNT] = { 0 }; + #define TRG_CLIENT_GET_PRIVATE(o) \ (G_TYPE_INSTANCE_GET_PRIVATE ((o), TRG_TYPE_CLIENT, TrgClientPrivate)) @@ -97,6 +104,15 @@ trg_client_class_init (TrgClientClass *klass) object_class->get_property = trg_client_get_property; object_class->set_property = trg_client_set_property; object_class->dispose = trg_client_dispose; + + signals[TC_SESSION_UPDATED] = + g_signal_new("session-updated", + G_TYPE_FROM_CLASS(object_class), + G_SIGNAL_RUN_LAST | G_SIGNAL_ACTION, + G_STRUCT_OFFSET(TrgClientClass, + session_updated), NULL, + NULL, g_cclosure_marshal_VOID__POINTER, + G_TYPE_NONE, 1, G_TYPE_POINTER); } static void @@ -144,6 +160,8 @@ void trg_client_set_session(TrgClient * tc, JsonObject * session) session_get_version(session, &priv->version); priv->session = session; + + g_signal_emit(tc, signals[TC_SESSION_UPDATED], 0, session); } TrgPrefs *trg_client_get_prefs(TrgClient *tc) diff --git a/src/trg-client.h b/src/trg-client.h index 92a30e0..67d026b 100644 --- a/src/trg-client.h +++ b/src/trg-client.h @@ -63,6 +63,8 @@ typedef struct { typedef struct { GObjectClass parent_class; + void (*session_updated) (TrgClient *tc, JsonObject * session, gpointer data); + } TrgClientClass; GType trg_client_get_type (void); diff --git a/src/trg-main-window.c b/src/trg-main-window.c index 6ef88bd..ff1bace 100644 --- a/src/trg-main-window.c +++ b/src/trg-main-window.c @@ -1557,6 +1557,11 @@ static gboolean trg_main_window_config_event(GtkWidget *widget, return FALSE; } +static void trg_client_session_updated_cb(TrgClient *tc, JsonObject *session, gpointer data) +{ + trg_status_bar_session_update(TRG_STATUS_BAR(data), session); +} + static GObject *trg_main_window_constructor(GType type, guint n_construct_properties, GObjectConstructParam * construct_params) { TrgMainWindow *self; @@ -1700,6 +1705,9 @@ static GObject *trg_main_window_constructor(GType type, priv->statusIcon = NULL; priv->statusBar = trg_status_bar_new(); + g_signal_connect(priv->client, "session-updated", + G_CALLBACK(trg_client_session_updated_cb), priv->statusBar); + /*g_signal_connect(priv->statusBar, "text-pushed", G_CALLBACK(status_bar_text_pushed), self);*/ gtk_box_pack_start(GTK_BOX(outerVbox), GTK_WIDGET(priv->statusBar), FALSE, diff --git a/src/trg-status-bar.c b/src/trg-status-bar.c index 5c2002b..42dacd1 100644 --- a/src/trg-status-bar.c +++ b/src/trg-status-bar.c @@ -88,6 +88,26 @@ void trg_status_bar_connect(TrgStatusBar * sb, JsonObject * session) g_free(statusMsg); } +void trg_status_bar_session_update(TrgStatusBar *sb, JsonObject *session) +{ + TrgStatusBarPrivate *priv = TRG_STATUS_BAR_GET_PRIVATE(sb); + gint64 free = session_get_download_dir_free_space(session); + gchar freeSpace[64]; + + if (free >= 0) { + gchar *freeSpaceString; + trg_strlsize(freeSpace, free); + freeSpaceString = g_strdup_printf(_("Free space: %s"), freeSpace); + gtk_label_set_text(GTK_LABEL(priv->free_lbl), freeSpaceString); + g_free(freeSpaceString); + } else { + gtk_label_set_text(GTK_LABEL(priv->free_lbl), ""); + } + + + +} + void trg_status_bar_update(TrgStatusBar * sb, trg_torrent_model_update_stats * stats, TrgClient * client) @@ -95,9 +115,9 @@ void trg_status_bar_update(TrgStatusBar * sb, TrgStatusBarPrivate *priv; JsonObject *session; gchar *speedText, *infoText; - gint64 uplimitraw, downlimitraw, freeSpaceRaw; + gint64 uplimitraw, downlimitraw; gchar downRateTotalString[32], upRateTotalString[32]; - gchar uplimit[64], downlimit[64], freeSpace[64]; + gchar uplimit[64], downlimit[64]; priv = TRG_STATUS_BAR_GET_PRIVATE(sb); session = trg_client_get_session(client); @@ -148,16 +168,6 @@ void trg_status_bar_update(TrgStatusBar * sb, gtk_label_set_text(GTK_LABEL(priv->info_lbl), infoText); gtk_label_set_text(GTK_LABEL(priv->speed_lbl), speedText); - freeSpaceRaw = session_get_download_dir_free_space(session); - if (freeSpaceRaw >= 0) { - gchar *freeSpaceString; - trg_strlsize(freeSpace, freeSpaceRaw); - freeSpaceString = g_strdup_printf(_("Free space: %s"), freeSpace); - gtk_label_set_text(GTK_LABEL(priv->free_lbl), freeSpaceString); - g_free(freeSpaceString); - } else { - gtk_label_set_text(GTK_LABEL(priv->free_lbl), ""); - } g_free(speedText); g_free(infoText); diff --git a/src/trg-status-bar.h b/src/trg-status-bar.h index a122dcb..1be850a 100644 --- a/src/trg-status-bar.h +++ b/src/trg-status-bar.h @@ -53,6 +53,7 @@ G_END_DECLS void trg_status_bar_update(TrgStatusBar * sb, trg_torrent_model_update_stats * stats, TrgClient * client); +void trg_status_bar_session_update(TrgStatusBar *sb, JsonObject *session); void trg_status_bar_connect(TrgStatusBar * sb, JsonObject * session); void trg_status_bar_push_connection_msg(TrgStatusBar * sb, const gchar * msg); |