summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Alan Fitton <ajf@eth0.org.uk>2012-08-25 12:39:00 +0100
committerGravatar Alan Fitton <ajf@eth0.org.uk>2012-08-25 12:39:00 +0100
commit75535446541c62fab468c0f8ed6c94018f0cc070 (patch)
treec3474db6d36c334af03aae92112929d8f445a127 /src
parentfb1dcb88fcc1a027da2f8e0ab1020afa1754ff3a (diff)
fix gtk2 support for new cell renderer and fix error reporting
Diffstat (limited to 'src')
-rw-r--r--src/protocol-constants.h3
-rw-r--r--src/requests.c3
-rw-r--r--src/torrent-cell-renderer.c87
-rw-r--r--src/torrent.c2
-rw-r--r--src/trg-client.c2
-rw-r--r--src/trg-main-window.c2
-rw-r--r--src/trg-menu-bar.c73
-rw-r--r--src/trg-torrent-tree-view.c2
8 files changed, 135 insertions, 39 deletions
diff --git a/src/protocol-constants.h b/src/protocol-constants.h
index 43b68f4..8d1605b 100644
--- a/src/protocol-constants.h
+++ b/src/protocol-constants.h
@@ -44,7 +44,6 @@
#define FIELD_DOWNLOAD_DIR "downloadDir"
#define FIELD_HASH_STRING "hashString"
#define FIELD_SWARM_SPEED "swarmSpeed"
-#define FIELD_ERROR_STRING "errorString"
#define FIELD_NAME "name"
#define FIELD_SIZEWHENDONE "sizeWhenDone"
#define FIELD_STATUS "status"
@@ -68,8 +67,8 @@
#define FIELD_LEFTUNTILDONE "leftUntilDone"
#define FIELD_ISFINISHED "isFinished"
#define FIELD_ISPRIVATE "isPrivate"
-#define FIELD_ERRORSTR "errorString"
#define FIELD_ERROR "error"
+#define FIELD_ERROR_STRING "errorString"
#define FIELD_BANDWIDTH_PRIORITY "bandwidthPriority"
#define FIELD_UPLOAD_LIMIT "uploadLimit"
#define FIELD_UPLOAD_LIMITED "uploadLimited"
diff --git a/src/requests.c b/src/requests.c
index 702319f..4e8d27e 100644
--- a/src/requests.c
+++ b/src/requests.c
@@ -206,7 +206,8 @@ JsonNode *torrent_get(gint64 id)
json_array_add_string_element(fields, FIELD_SEED_RATIO_MODE);
json_array_add_string_element(fields, FIELD_PEER_LIMIT);
json_array_add_string_element(fields, FIELD_ACTIVITY_DATE);
- json_array_add_string_element(fields, FIELD_ERRORSTR);
+ json_array_add_string_element(fields, FIELD_ERROR);
+ json_array_add_string_element(fields, FIELD_ERROR_STRING);
json_array_add_string_element(fields, FIELD_WANTED);
json_array_add_string_element(fields, FIELD_PRIORITIES);
json_array_add_string_element(fields, FIELD_RECHECK_PROGRESS);
diff --git a/src/torrent-cell-renderer.c b/src/torrent-cell-renderer.c
index 2efc4cc..c94e175 100644
--- a/src/torrent-cell-renderer.c
+++ b/src/torrent-cell-renderer.c
@@ -32,7 +32,6 @@ enum
P_HAVEVALID,
P_HAVEUNCHECKED,
P_ERROR,
- P_NAME,
P_SIZEWHENDONE,
P_TOTALSIZE,
P_UPLOADED,
@@ -56,8 +55,17 @@ enum
#define COMPACT_ICON_SIZE GTK_ICON_SIZE_MENU
#define FULL_ICON_SIZE GTK_ICON_SIZE_DND
-typedef cairo_t GtrDrawable;
+#if GTK_CHECK_VERSION( 3, 0, 0 )
+#define FOREGROUND_COLOR_KEY "foreground-rgba"
typedef GdkRGBA GtrColor;
+typedef cairo_t GtrDrawable;
+typedef GtkRequisition GtrRequisition;
+#else
+#define FOREGROUND_COLOR_KEY "foreground-gdk"
+typedef GdkColor GtrColor;
+typedef GdkWindow GtrDrawable;
+typedef GdkRectangle GtrRequisition;
+#endif
/***
****
@@ -105,7 +113,6 @@ struct TorrentCellRendererPrivate
gdouble metadataPercentComplete;
gdouble ratio;
guint flags;
- const gchar *name;
gint64 peersFromUs;
gint64 webSeedsToUs;
gint64 peersToUs;
@@ -385,7 +392,14 @@ gtr_cell_renderer_get_preferred_size( GtkCellRenderer * renderer,
GtkRequisition * minimum_size,
GtkRequisition * natural_size )
{
+#if GTK_CHECK_VERSION( 3, 0, 0 )
gtk_cell_renderer_get_preferred_size( renderer, widget, minimum_size, natural_size );
+#else
+ GtkRequisition r;
+ gtk_cell_renderer_get_size( renderer, widget, NULL, NULL, NULL, &r.width, &r.height );
+ if( minimum_size ) *minimum_size = r;
+ if( natural_size ) *natural_size = r;
+#endif
}
static void
@@ -446,9 +460,6 @@ get_size_full( TorrentCellRenderer * cell,
GdkPixbuf * icon;
struct TorrentCellRendererPrivate * p = cell->priv;
- /*const tr_torrent * tor = p->tor;
- const tr_stat * st = tr_torrentStatCached( (tr_torrent*)tor );
- const tr_info * inf = tr_torrentInfo( tor );*/
GString * gstr_prog = p->gstr1;
GString * gstr_stat = p->gstr2;
@@ -487,7 +498,11 @@ get_size_full( TorrentCellRenderer * cell,
static void
torrent_cell_renderer_get_size( GtkCellRenderer * cell,
GtkWidget * widget,
+#if GTK_CHECK_VERSION( 3,0,0 )
const GdkRectangle * cell_area,
+#else
+ GdkRectangle * cell_area,
+#endif
gint * x_offset,
gint * y_offset,
gint * width,
@@ -522,19 +537,29 @@ torrent_cell_renderer_get_size( GtkCellRenderer * cell,
}
}
-
-#define FOREGROUND_COLOR_KEY "foreground-rgba"
-
static void
-get_text_color( GtkWidget * w, TorrentCellRenderer *r, GtrColor * setme )
+get_text_color( TorrentCellRenderer *r, GtkWidget *widget, GtrColor * setme )
{
+ struct TorrentCellRendererPrivate *p = r->priv;
+#if GTK_CHECK_VERSION( 3,0,0 )
+
static const GdkRGBA red = { 1.0, 0, 0, 0 };
- if( r->priv->error )
+ if( p->error )
*setme = red;
- else if( r->priv->flags & TORRENT_FLAG_PAUSED )
- gtk_style_context_get_color( gtk_widget_get_style_context( w ), GTK_STATE_FLAG_INSENSITIVE, setme );
+ else if( p->flags & TORRENT_FLAG_PAUSED )
+ gtk_style_context_get_color( gtk_widget_get_style_context( widget ), GTK_STATE_FLAG_INSENSITIVE, setme );
else
- gtk_style_context_get_color( gtk_widget_get_style_context( w ), GTK_STATE_FLAG_NORMAL, setme );
+ gtk_style_context_get_color( gtk_widget_get_style_context( widget ), GTK_STATE_FLAG_NORMAL, setme );
+
+#else
+ static const GdkColor red = { 0, 65535, 0, 0 };
+ if( p->error )
+ *setme = red;
+ else if( p->error & TORRENT_FLAG_PAUSED )
+ *setme = gtk_widget_get_style(widget)->text[GTK_STATE_INSENSITIVE];
+ else
+ *setme = gtk_widget_get_style(widget)->text[GTK_STATE_NORMAL];
+#endif
}
static double
@@ -569,17 +594,26 @@ gtr_cell_renderer_render( GtkCellRenderer * renderer,
const GdkRectangle * area,
GtkCellRendererState flags)
{
+#if GTK_CHECK_VERSION( 3, 0, 0 )
gtk_cell_renderer_render( renderer, drawable, widget, area, area, flags );
+#else
+ gtk_cell_renderer_render( renderer, drawable, widget, area, area, area, flags );
+#endif
}
-
static void
torrent_cell_renderer_render( GtkCellRenderer * cell,
- GtrDrawable * window,
- GtkWidget * widget,
- const GdkRectangle * background_area,
- const GdkRectangle * cell_area,
- GtkCellRendererState flags )
+ GtrDrawable * window,
+ GtkWidget * widget,
+#if GTK_CHECK_VERSION( 3,0,0 )
+ const GdkRectangle * background_area,
+ const GdkRectangle * cell_area,
+#else
+ GdkRectangle * background_area,
+ GdkRectangle * cell_area,
+ GdkRectangle * expose_area,
+#endif
+ GtkCellRendererState flags )
{
TorrentCellRenderer * self = TORRENT_CELL_RENDERER( cell );
@@ -650,9 +684,6 @@ static void torrent_cell_renderer_set_property(GObject * object,
case P_ERROR:
p->error = g_value_get_int64(v);
break;
- case P_NAME:
- p->name = g_value_get_string(v);
- break;
case P_RATIO:
p->ratio = g_value_get_double(v);
break;
@@ -738,12 +769,6 @@ torrent_cell_renderer_class_init( TorrentCellRendererClass * klass )
gobject_class->get_property = torrent_cell_renderer_get_property;
gobject_class->dispose = torrent_cell_renderer_dispose;
- g_object_class_install_property( gobject_class, P_NAME,
- g_param_spec_string( "name", NULL,
- "name",
- "",
- G_PARAM_READWRITE ) );
-
g_object_class_install_property( gobject_class, P_JSON,
g_param_spec_pointer( "json", NULL,
"json",
@@ -957,7 +982,7 @@ render_compact( TorrentCellRenderer * cell,
g_string_truncate( gstr_stat, 0 );
getShortStatusString( gstr_stat, cell );
gtk_cell_renderer_get_padding( GTK_CELL_RENDERER( cell ), &xpad, &ypad );
- get_text_color( widget, cell, &text_color );
+ get_text_color( cell, widget, &text_color );
fill_area = *background_area;
fill_area.x += xpad;
@@ -1034,7 +1059,7 @@ render_full( TorrentCellRenderer * cell,
g_string_truncate( gstr_stat, 0 );
getStatusString( gstr_stat, cell );
gtk_cell_renderer_get_padding( GTK_CELL_RENDERER( cell ), &xpad, &ypad );
- get_text_color( widget, cell, &text_color );
+ get_text_color( cell, widget, &text_color );
/* get the idealized cell dimensions */
g_object_set( p->icon_renderer, "pixbuf", icon, NULL );
diff --git a/src/torrent.c b/src/torrent.c
index d35be51..e8f8ec9 100644
--- a/src/torrent.c
+++ b/src/torrent.c
@@ -322,7 +322,7 @@ gint64 torrent_get_done_date(JsonObject * t)
const gchar *torrent_get_errorstr(JsonObject * t)
{
- return json_object_get_string_member(t, FIELD_ERRORSTR);
+ return json_object_get_string_member(t, FIELD_ERROR_STRING);
}
gint64 torrent_get_error(JsonObject *t)
diff --git a/src/trg-client.c b/src/trg-client.c
index 970fb46..0f03abd 100644
--- a/src/trg-client.c
+++ b/src/trg-client.c
@@ -159,6 +159,8 @@ TrgClient *trg_client_new(void)
priv->updateMutex = g_mutex_new();
priv->configMutex = g_mutex_new();
priv->tlsKey = g_private_new(NULL);
+ priv->seedRatioLimited = FALSE;
+ priv->seedRatioLimit = 0.00;
priv->pool = g_thread_pool_new((GFunc) dispatch_async_threadfunc, tc,
DISPATCH_POOL_SIZE, TRUE, NULL);
diff --git a/src/trg-main-window.c b/src/trg-main-window.c
index 5131a3c..72c5f66 100644
--- a/src/trg-main-window.c
+++ b/src/trg-main-window.c
@@ -2498,6 +2498,8 @@ TrgStateSelector *trg_main_window_get_state_selector(TrgMainWindow * win)
return priv->stateSelector;
}
+/* Couldn't find a way to get the width/height on exit, so save the
+ * values of this event for when that happens. */
static gboolean
trg_main_window_config_event(TrgMainWindow * win,
GdkEvent * event,
diff --git a/src/trg-menu-bar.c b/src/trg-menu-bar.c
index aa8b797..fd5756c 100644
--- a/src/trg-menu-bar.c
+++ b/src/trg-menu-bar.c
@@ -106,6 +106,9 @@ struct _TrgMenuBarPrivate {
GtkWidget *mb_top_queue;
GtkWidget *mb_start_now;
GtkWidget *mb_queues_seperator;
+ GtkWidget *mb_view_classic;
+ GtkWidget *mb_view_transmission;
+ GtkWidget *mb_view_transmission_compact;
GtkAccelGroup *accel_group;
TrgPrefs *prefs;
TrgMainWindow *main_window;
@@ -326,6 +329,19 @@ trg_menu_bar_accel_add(TrgMenuBar * menu, GtkWidget * item,
}
+static void view_menu_radio_item_toggled_cb(GtkCheckMenuItem * w, gpointer data)
+{
+ TrgPrefs *p = TRG_PREFS(data);
+ const gchar *key =
+ (gchar *) g_object_get_data(G_OBJECT(w), G_DATAKEY_CONF_KEY);
+
+ if (gtk_check_menu_item_get_active(w)) {
+ gint index = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), "pref-index"));
+ g_message("active index = %d", index);
+ trg_prefs_set_int(p, key, index, TRG_PREFS_GLOBAL);
+ }
+}
+
static void view_menu_item_toggled_cb(GtkCheckMenuItem * w, gpointer data)
{
TrgPrefs *p = TRG_PREFS(data);
@@ -344,7 +360,7 @@ view_menu_bar_toggled_dependency_cb(GtkCheckMenuItem * w, gpointer data)
}
static void
-trg_menu_bar_view_item_update(TrgPrefs * p, gchar * updatedKey,
+trg_menu_bar_view_item_update(TrgPrefs * p, const gchar * updatedKey,
gpointer data)
{
gchar *key =
@@ -355,8 +371,46 @@ trg_menu_bar_view_item_update(TrgPrefs * p, gchar * updatedKey,
TRG_PREFS_GLOBAL));
}
-static GtkWidget *trg_menu_bar_view_item_new(TrgPrefs * prefs, gchar * key,
- gchar * label,
+static void
+trg_menu_bar_view_radio_item_update(TrgPrefs * p, const gchar * updatedKey,
+ gpointer data)
+{
+ const gchar *key =
+ (gchar *) g_object_get_data(G_OBJECT(data), G_DATAKEY_CONF_KEY);
+ gint myIndex = GPOINTER_TO_INT(g_object_get_data(G_OBJECT(data), "pref-index"));
+
+ if (!g_strcmp0(updatedKey, key)) {
+ gboolean shouldBeActive = trg_prefs_get_int(p, key, TRG_PREFS_GLOBAL) == myIndex;
+ if (shouldBeActive != gtk_check_menu_item_get_active(GTK_CHECK_MENU_ITEM(data)))
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(data), shouldBeActive);
+ }
+}
+
+static GtkWidget *trg_menu_bar_view_radio_item_new(TrgPrefs * prefs,
+ GSList *group,
+ const gchar * key,
+ gint index,
+ const gchar * label)
+{
+ GtkWidget *w = gtk_radio_menu_item_new_with_label(group, label);
+ g_object_set_data_full(G_OBJECT(w), G_DATAKEY_CONF_KEY, g_strdup(key),
+ g_free);
+ g_object_set_data(G_OBJECT(w), "pref-index", GINT_TO_POINTER(index));
+
+ gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(w),
+ trg_prefs_get_int(prefs, key,
+ TRG_PREFS_GLOBAL) == (gint64)index);
+
+ g_signal_connect(w, "toggled",
+ G_CALLBACK(view_menu_radio_item_toggled_cb), prefs);
+ g_signal_connect(prefs, "pref-changed",
+ G_CALLBACK(trg_menu_bar_view_radio_item_update), w);
+
+ return w;
+}
+
+static GtkWidget *trg_menu_bar_view_item_new(TrgPrefs * prefs, const gchar * key,
+ const gchar * label,
GtkWidget * dependency)
{
GtkWidget *w = gtk_check_menu_item_new_with_label(label);
@@ -390,8 +444,21 @@ static GtkWidget *trg_menu_bar_view_menu_new(TrgMenuBar * mb)
GtkWidget *view = gtk_menu_item_new_with_mnemonic(_("_View"));
GtkWidget *viewMenu = gtk_menu_new();
+ GSList *group;
+
gtk_menu_item_set_submenu(GTK_MENU_ITEM(view), viewMenu);
+ priv->mb_view_classic = trg_menu_bar_view_radio_item_new(priv->prefs, NULL, "style", 0, _("Classic"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), priv->mb_view_classic);
+ group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (priv->mb_view_classic));
+ priv->mb_view_transmission = trg_menu_bar_view_radio_item_new(priv->prefs, group, "style", 1, _("Transmission"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), priv->mb_view_transmission);
+ group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (priv->mb_view_transmission));
+ priv->mb_view_transmission_compact = trg_menu_bar_view_radio_item_new(priv->prefs, group, "style", 2, _("Transmission Compact"));
+ gtk_menu_shell_append(GTK_MENU_SHELL(viewMenu), priv->mb_view_transmission_compact);
+
+ priv->mb_view_classic =
+
priv->mb_view_states =
trg_menu_bar_view_item_new(priv->prefs,
TRG_PREFS_KEY_SHOW_STATE_SELECTOR,
diff --git a/src/trg-torrent-tree-view.c b/src/trg-torrent-tree-view.c
index b2b5ac1..6c6bf36 100644
--- a/src/trg-torrent-tree-view.c
+++ b/src/trg-torrent-tree-view.c
@@ -191,7 +191,7 @@ static void setup_classic_layout(TrgClient *tc, TrgTorrentTreeView *tv)
"connected", TORRENT_COLUMN_PEERS_CONNECTED,
NULL);
- g_object_set(G_OBJECT(renderer), "client", tv, NULL);
+ g_object_set(G_OBJECT(renderer), "client", tc, NULL);
//gtk_tree_view_column_set_min_width(column, 0);
gtk_tree_view_column_set_resizable(column, FALSE);