(gtk) copyediting: update several files to be closer to the gtk+ indentation style.
This commit is contained in:
parent
2a52ebab20
commit
10b96f0f12
3872
gtk/details.c
3872
gtk/details.c
File diff suppressed because it is too large
Load Diff
|
@ -27,245 +27,254 @@
|
|||
|
||||
typedef struct
|
||||
{
|
||||
char * target;
|
||||
guint progress_tag;
|
||||
GtkWidget * file_radio;
|
||||
GtkWidget * file_chooser;
|
||||
GtkWidget * folder_radio;
|
||||
GtkWidget * folder_chooser;
|
||||
GtkWidget * pieces_lb;
|
||||
GtkWidget * destination_chooser;
|
||||
GtkWidget * comment_check;
|
||||
GtkWidget * comment_entry;
|
||||
GtkWidget * private_check;
|
||||
GtkWidget * progress_label;
|
||||
GtkWidget * progress_bar;
|
||||
GtkWidget * progress_dialog;
|
||||
GtkWidget * dialog;
|
||||
GtkTextBuffer * announce_text_buffer;
|
||||
TrCore * core;
|
||||
tr_metainfo_builder * builder;
|
||||
char * target;
|
||||
guint progress_tag;
|
||||
GtkWidget * file_radio;
|
||||
GtkWidget * file_chooser;
|
||||
GtkWidget * folder_radio;
|
||||
GtkWidget * folder_chooser;
|
||||
GtkWidget * pieces_lb;
|
||||
GtkWidget * destination_chooser;
|
||||
GtkWidget * comment_check;
|
||||
GtkWidget * comment_entry;
|
||||
GtkWidget * private_check;
|
||||
GtkWidget * progress_label;
|
||||
GtkWidget * progress_bar;
|
||||
GtkWidget * progress_dialog;
|
||||
GtkWidget * dialog;
|
||||
GtkTextBuffer * announce_text_buffer;
|
||||
TrCore * core;
|
||||
tr_metainfo_builder * builder;
|
||||
}
|
||||
MakeMetaUI;
|
||||
|
||||
static void
|
||||
freeMetaUI (gpointer p)
|
||||
{
|
||||
MakeMetaUI * ui = p;
|
||||
MakeMetaUI * ui = p;
|
||||
|
||||
tr_metaInfoBuilderFree (ui->builder);
|
||||
g_free (ui->target);
|
||||
memset (ui, ~0, sizeof (MakeMetaUI));
|
||||
g_free (ui);
|
||||
tr_metaInfoBuilderFree (ui->builder);
|
||||
g_free (ui->target);
|
||||
memset (ui, ~0, sizeof (MakeMetaUI));
|
||||
g_free (ui);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
onProgressDialogRefresh (gpointer data)
|
||||
{
|
||||
char * str = NULL;
|
||||
MakeMetaUI * ui = data;
|
||||
const tr_metainfo_builder * b = ui->builder;
|
||||
GtkDialog * d = GTK_DIALOG (ui->progress_dialog);
|
||||
GtkProgressBar * p = GTK_PROGRESS_BAR (ui->progress_bar);
|
||||
const double fraction = b->pieceCount ? ((double)b->pieceIndex / b->pieceCount) : 0;
|
||||
char * base = g_path_get_basename (b->top);
|
||||
char * str = NULL;
|
||||
MakeMetaUI * ui = data;
|
||||
const tr_metainfo_builder * b = ui->builder;
|
||||
GtkDialog * d = GTK_DIALOG (ui->progress_dialog);
|
||||
GtkProgressBar * p = GTK_PROGRESS_BAR (ui->progress_bar);
|
||||
const double fraction = b->pieceCount ? ((double)b->pieceIndex / b->pieceCount) : 0;
|
||||
char * base = g_path_get_basename (b->top);
|
||||
|
||||
/* progress label */
|
||||
if (!b->isDone)
|
||||
str = g_strdup_printf (_("Creating \"%s\""), base);
|
||||
else if (b->result == TR_MAKEMETA_OK)
|
||||
str = g_strdup_printf (_("Created \"%s\"!"), base);
|
||||
else if (b->result == TR_MAKEMETA_URL)
|
||||
str = g_strdup_printf (_("Error: invalid announce URL \"%s\""), b->errfile);
|
||||
else if (b->result == TR_MAKEMETA_CANCELLED)
|
||||
str = g_strdup_printf (_("Cancelled"));
|
||||
else if (b->result == TR_MAKEMETA_IO_READ)
|
||||
str = g_strdup_printf (_("Error reading \"%s\": %s"), b->errfile, g_strerror (b->my_errno));
|
||||
else if (b->result == TR_MAKEMETA_IO_WRITE)
|
||||
str = g_strdup_printf (_("Error writing \"%s\": %s"), b->errfile, g_strerror (b->my_errno));
|
||||
else
|
||||
g_assert_not_reached ();
|
||||
/* progress label */
|
||||
if (!b->isDone)
|
||||
str = g_strdup_printf (_("Creating \"%s\""), base);
|
||||
else if (b->result == TR_MAKEMETA_OK)
|
||||
str = g_strdup_printf (_("Created \"%s\"!"), base);
|
||||
else if (b->result == TR_MAKEMETA_URL)
|
||||
str = g_strdup_printf (_("Error: invalid announce URL \"%s\""), b->errfile);
|
||||
else if (b->result == TR_MAKEMETA_CANCELLED)
|
||||
str = g_strdup_printf (_("Cancelled"));
|
||||
else if (b->result == TR_MAKEMETA_IO_READ)
|
||||
str = g_strdup_printf (_("Error reading \"%s\": %s"), b->errfile, g_strerror (b->my_errno));
|
||||
else if (b->result == TR_MAKEMETA_IO_WRITE)
|
||||
str = g_strdup_printf (_("Error writing \"%s\": %s"), b->errfile, g_strerror (b->my_errno));
|
||||
else
|
||||
g_assert_not_reached ();
|
||||
|
||||
if (str != NULL) {
|
||||
gtr_label_set_text (GTK_LABEL (ui->progress_label), str);
|
||||
g_free (str);
|
||||
if (str != NULL)
|
||||
{
|
||||
gtr_label_set_text (GTK_LABEL (ui->progress_label), str);
|
||||
g_free (str);
|
||||
}
|
||||
|
||||
/* progress bar */
|
||||
if (!b->pieceIndex)
|
||||
str = g_strdup ("");
|
||||
else {
|
||||
char sizebuf[128];
|
||||
tr_strlsize (sizebuf, (uint64_t)b->pieceIndex *
|
||||
/* progress bar */
|
||||
if (!b->pieceIndex)
|
||||
{
|
||||
str = g_strdup ("");
|
||||
}
|
||||
else
|
||||
{
|
||||
char sizebuf[128];
|
||||
tr_strlsize (sizebuf, (uint64_t)b->pieceIndex *
|
||||
(uint64_t)b->pieceSize, sizeof (sizebuf));
|
||||
/* how much data we've scanned through to generate checksums */
|
||||
str = g_strdup_printf (_("Scanned %s"), sizebuf);
|
||||
/* how much data we've scanned through to generate checksums */
|
||||
str = g_strdup_printf (_("Scanned %s"), sizebuf);
|
||||
}
|
||||
gtk_progress_bar_set_fraction (p, fraction);
|
||||
gtk_progress_bar_set_text (p, str);
|
||||
g_free (str);
|
||||
gtk_progress_bar_set_fraction (p, fraction);
|
||||
gtk_progress_bar_set_text (p, str);
|
||||
g_free (str);
|
||||
|
||||
/* buttons */
|
||||
gtk_dialog_set_response_sensitive (d, GTK_RESPONSE_CANCEL, !b->isDone);
|
||||
gtk_dialog_set_response_sensitive (d, GTK_RESPONSE_CLOSE, b->isDone);
|
||||
gtk_dialog_set_response_sensitive (d, GTK_RESPONSE_ACCEPT, b->isDone && !b->result);
|
||||
/* buttons */
|
||||
gtk_dialog_set_response_sensitive (d, GTK_RESPONSE_CANCEL, !b->isDone);
|
||||
gtk_dialog_set_response_sensitive (d, GTK_RESPONSE_CLOSE, b->isDone);
|
||||
gtk_dialog_set_response_sensitive (d, GTK_RESPONSE_ACCEPT, b->isDone && !b->result);
|
||||
|
||||
g_free (base);
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
g_free (base);
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static void
|
||||
onProgressDialogDestroyed (gpointer data, GObject * dead UNUSED)
|
||||
{
|
||||
MakeMetaUI * ui = data;
|
||||
g_source_remove (ui->progress_tag);
|
||||
MakeMetaUI * ui = data;
|
||||
g_source_remove (ui->progress_tag);
|
||||
}
|
||||
|
||||
static void
|
||||
addTorrent (MakeMetaUI * ui)
|
||||
{
|
||||
char * path;
|
||||
const tr_metainfo_builder * b = ui->builder;
|
||||
tr_ctor * ctor = tr_ctorNew (gtr_core_session (ui->core));
|
||||
char * path;
|
||||
const tr_metainfo_builder * b = ui->builder;
|
||||
tr_ctor * ctor = tr_ctorNew (gtr_core_session (ui->core));
|
||||
|
||||
tr_ctorSetMetainfoFromFile (ctor, ui->target);
|
||||
tr_ctorSetMetainfoFromFile (ctor, ui->target);
|
||||
|
||||
path = g_path_get_dirname (b->top);
|
||||
tr_ctorSetDownloadDir (ctor, TR_FORCE, path);
|
||||
g_free (path);
|
||||
path = g_path_get_dirname (b->top);
|
||||
tr_ctorSetDownloadDir (ctor, TR_FORCE, path);
|
||||
g_free (path);
|
||||
|
||||
gtr_core_add_ctor (ui->core, ctor);
|
||||
gtr_core_add_ctor (ui->core, ctor);
|
||||
}
|
||||
|
||||
static void
|
||||
onProgressDialogResponse (GtkDialog * d, int response, gpointer data)
|
||||
{
|
||||
MakeMetaUI * ui = data;
|
||||
MakeMetaUI * ui = data;
|
||||
|
||||
switch (response)
|
||||
switch (response)
|
||||
{
|
||||
case GTK_RESPONSE_CANCEL:
|
||||
ui->builder->abortFlag = TRUE;
|
||||
gtk_widget_destroy (GTK_WIDGET (d));
|
||||
break;
|
||||
case GTK_RESPONSE_ACCEPT:
|
||||
addTorrent (ui);
|
||||
/* fall-through */
|
||||
case GTK_RESPONSE_CLOSE:
|
||||
gtk_widget_destroy (ui->builder->result ? GTK_WIDGET (d) : ui->dialog);
|
||||
break;
|
||||
default:
|
||||
g_assert (0 && "unhandled response");
|
||||
case GTK_RESPONSE_CANCEL:
|
||||
ui->builder->abortFlag = TRUE;
|
||||
gtk_widget_destroy (GTK_WIDGET (d));
|
||||
break;
|
||||
|
||||
case GTK_RESPONSE_ACCEPT:
|
||||
addTorrent (ui);
|
||||
/* fall-through */
|
||||
|
||||
case GTK_RESPONSE_CLOSE:
|
||||
gtk_widget_destroy (ui->builder->result ? GTK_WIDGET (d) : ui->dialog);
|
||||
break;
|
||||
|
||||
default:
|
||||
g_assert (0 && "unhandled response");
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
makeProgressDialog (GtkWidget * parent, MakeMetaUI * ui)
|
||||
{
|
||||
GtkWidget *d, *l, *w, *v, *fr;
|
||||
GtkWidget *d, *l, *w, *v, *fr;
|
||||
|
||||
d = gtk_dialog_new_with_buttons (_("New Torrent"),
|
||||
GTK_WINDOW (parent),
|
||||
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
ui->progress_dialog = d;
|
||||
g_signal_connect (d, "response", G_CALLBACK (onProgressDialogResponse), ui);
|
||||
d = gtk_dialog_new_with_buttons (_("New Torrent"),
|
||||
GTK_WINDOW (parent),
|
||||
GTK_DIALOG_MODAL|GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
GTK_STOCK_ADD, GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
ui->progress_dialog = d;
|
||||
g_signal_connect (d, "response", G_CALLBACK (onProgressDialogResponse), ui);
|
||||
|
||||
fr = gtk_frame_new (NULL);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (fr), GUI_PAD_BIG);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (fr), GTK_SHADOW_NONE);
|
||||
v = gtk_box_new (GTK_ORIENTATION_VERTICAL, GUI_PAD);
|
||||
gtk_container_add (GTK_CONTAINER (fr), v);
|
||||
fr = gtk_frame_new (NULL);
|
||||
gtk_container_set_border_width (GTK_CONTAINER (fr), GUI_PAD_BIG);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (fr), GTK_SHADOW_NONE);
|
||||
v = gtk_box_new (GTK_ORIENTATION_VERTICAL, GUI_PAD);
|
||||
gtk_container_add (GTK_CONTAINER (fr), v);
|
||||
|
||||
l = gtk_label_new (_("Creating torrent…"));
|
||||
gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
|
||||
gtk_label_set_justify (GTK_LABEL (l), GTK_JUSTIFY_LEFT);
|
||||
ui->progress_label = l;
|
||||
gtk_box_pack_start (GTK_BOX (v), l, FALSE, FALSE, 0);
|
||||
l = gtk_label_new (_("Creating torrent…"));
|
||||
gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
|
||||
gtk_label_set_justify (GTK_LABEL (l), GTK_JUSTIFY_LEFT);
|
||||
ui->progress_label = l;
|
||||
gtk_box_pack_start (GTK_BOX (v), l, FALSE, FALSE, 0);
|
||||
|
||||
w = gtk_progress_bar_new ();
|
||||
ui->progress_bar = w;
|
||||
gtk_box_pack_start (GTK_BOX (v), w, FALSE, FALSE, 0);
|
||||
w = gtk_progress_bar_new ();
|
||||
ui->progress_bar = w;
|
||||
gtk_box_pack_start (GTK_BOX (v), w, FALSE, FALSE, 0);
|
||||
|
||||
ui->progress_tag = gdk_threads_add_timeout_seconds (SECONDARY_WINDOW_REFRESH_INTERVAL_SECONDS, onProgressDialogRefresh, ui);
|
||||
g_object_weak_ref (G_OBJECT (d), onProgressDialogDestroyed, ui);
|
||||
onProgressDialogRefresh (ui);
|
||||
ui->progress_tag = gdk_threads_add_timeout_seconds (SECONDARY_WINDOW_REFRESH_INTERVAL_SECONDS, onProgressDialogRefresh, ui);
|
||||
g_object_weak_ref (G_OBJECT (d), onProgressDialogDestroyed, ui);
|
||||
onProgressDialogRefresh (ui);
|
||||
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), fr);
|
||||
gtk_widget_show (d);
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), fr);
|
||||
gtk_widget_show (d);
|
||||
}
|
||||
|
||||
static void
|
||||
onResponse (GtkDialog* d, int response, gpointer user_data)
|
||||
{
|
||||
MakeMetaUI * ui = user_data;
|
||||
MakeMetaUI * ui = user_data;
|
||||
|
||||
if (response == GTK_RESPONSE_ACCEPT)
|
||||
if (response == GTK_RESPONSE_ACCEPT)
|
||||
{
|
||||
if (ui->builder != NULL)
|
||||
if (ui->builder != NULL)
|
||||
{
|
||||
int i;
|
||||
int n;
|
||||
int tier;
|
||||
GtkTextIter start, end;
|
||||
char * dir;
|
||||
char * base;
|
||||
char * tracker_text;
|
||||
char ** tracker_strings;
|
||||
GtkEntry * c_entry = GTK_ENTRY (ui->comment_entry);
|
||||
GtkToggleButton * p_check = GTK_TOGGLE_BUTTON (ui->private_check);
|
||||
GtkToggleButton * c_check = GTK_TOGGLE_BUTTON (ui->comment_check);
|
||||
const char * comment = gtk_entry_get_text (c_entry);
|
||||
const gboolean isPrivate = gtk_toggle_button_get_active (p_check);
|
||||
const gboolean useComment = gtk_toggle_button_get_active (c_check);
|
||||
tr_tracker_info * trackers;
|
||||
int i;
|
||||
int n;
|
||||
int tier;
|
||||
GtkTextIter start, end;
|
||||
char * dir;
|
||||
char * base;
|
||||
char * tracker_text;
|
||||
char ** tracker_strings;
|
||||
GtkEntry * c_entry = GTK_ENTRY (ui->comment_entry);
|
||||
GtkToggleButton * p_check = GTK_TOGGLE_BUTTON (ui->private_check);
|
||||
GtkToggleButton * c_check = GTK_TOGGLE_BUTTON (ui->comment_check);
|
||||
const char * comment = gtk_entry_get_text (c_entry);
|
||||
const gboolean isPrivate = gtk_toggle_button_get_active (p_check);
|
||||
const gboolean useComment = gtk_toggle_button_get_active (c_check);
|
||||
tr_tracker_info * trackers;
|
||||
|
||||
/* destination file */
|
||||
dir = gtk_file_chooser_get_filename (
|
||||
GTK_FILE_CHOOSER (ui->destination_chooser));
|
||||
base = g_path_get_basename (ui->builder->top);
|
||||
g_free (ui->target);
|
||||
ui->target = g_strdup_printf ("%s/%s.torrent", dir, base);
|
||||
/* destination file */
|
||||
dir = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (ui->destination_chooser));
|
||||
base = g_path_get_basename (ui->builder->top);
|
||||
g_free (ui->target);
|
||||
ui->target = g_strdup_printf ("%s/%s.torrent", dir, base);
|
||||
|
||||
/* build the array of trackers */
|
||||
gtk_text_buffer_get_bounds (ui->announce_text_buffer, &start, &end);
|
||||
tracker_text = gtk_text_buffer_get_text (ui->announce_text_buffer,
|
||||
/* build the array of trackers */
|
||||
gtk_text_buffer_get_bounds (ui->announce_text_buffer, &start, &end);
|
||||
tracker_text = gtk_text_buffer_get_text (ui->announce_text_buffer,
|
||||
&start, &end, FALSE);
|
||||
tracker_strings = g_strsplit (tracker_text, "\n", 0);
|
||||
for (i=0; tracker_strings[i];)
|
||||
++i;
|
||||
trackers = g_new0 (tr_tracker_info, i);
|
||||
for (i=n=tier=0; tracker_strings[i]; ++i) {
|
||||
const char * str = tracker_strings[i];
|
||||
if (!*str)
|
||||
++tier;
|
||||
else {
|
||||
trackers[n].tier = tier;
|
||||
trackers[n].announce = tracker_strings[i];
|
||||
++n;
|
||||
tracker_strings = g_strsplit (tracker_text, "\n", 0);
|
||||
for (i=0; tracker_strings[i];)
|
||||
++i;
|
||||
trackers = g_new0 (tr_tracker_info, i);
|
||||
for (i=n=tier=0; tracker_strings[i]; ++i)
|
||||
{
|
||||
const char * str = tracker_strings[i];
|
||||
if (!*str)
|
||||
{
|
||||
++tier;
|
||||
}
|
||||
else
|
||||
{
|
||||
trackers[n].tier = tier;
|
||||
trackers[n].announce = tracker_strings[i];
|
||||
++n;
|
||||
}
|
||||
}
|
||||
|
||||
/* build the .torrent */
|
||||
makeProgressDialog (GTK_WIDGET (d), ui);
|
||||
tr_makeMetaInfo (ui->builder, ui->target, trackers, n,
|
||||
useComment ? comment : NULL, isPrivate);
|
||||
/* build the .torrent */
|
||||
makeProgressDialog (GTK_WIDGET (d), ui);
|
||||
tr_makeMetaInfo (ui->builder, ui->target, trackers, n,
|
||||
useComment ? comment : NULL, isPrivate);
|
||||
|
||||
/* cleanup */
|
||||
g_free (trackers);
|
||||
g_strfreev (tracker_strings);
|
||||
g_free (tracker_text);
|
||||
g_free (base);
|
||||
g_free (dir);
|
||||
/* cleanup */
|
||||
g_free (trackers);
|
||||
g_strfreev (tracker_strings);
|
||||
g_free (tracker_text);
|
||||
g_free (base);
|
||||
g_free (dir);
|
||||
}
|
||||
}
|
||||
else if (response == GTK_RESPONSE_CLOSE)
|
||||
else if (response == GTK_RESPONSE_CLOSE)
|
||||
{
|
||||
gtk_widget_destroy (GTK_WIDGET (d));
|
||||
gtk_widget_destroy (GTK_WIDGET (d));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -276,99 +285,97 @@ onResponse (GtkDialog* d, int response, gpointer user_data)
|
|||
static void
|
||||
onSourceToggled (GtkToggleButton * tb, gpointer user_data)
|
||||
{
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (user_data),
|
||||
gtk_toggle_button_get_active (tb));
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (user_data),
|
||||
gtk_toggle_button_get_active (tb));
|
||||
}
|
||||
|
||||
static void
|
||||
updatePiecesLabel (MakeMetaUI * ui)
|
||||
{
|
||||
const tr_metainfo_builder * builder = ui->builder;
|
||||
const char * filename = builder ? builder->top : NULL;
|
||||
GString * gstr = g_string_new (NULL);
|
||||
const tr_metainfo_builder * builder = ui->builder;
|
||||
const char * filename = builder ? builder->top : NULL;
|
||||
GString * gstr = g_string_new (NULL);
|
||||
|
||||
g_string_append (gstr, "<i>");
|
||||
if (!filename)
|
||||
g_string_append (gstr, "<i>");
|
||||
if (!filename)
|
||||
{
|
||||
g_string_append (gstr, _("No source selected"));
|
||||
g_string_append (gstr, _("No source selected"));
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
char buf[128];
|
||||
tr_strlsize (buf, builder->totalSize, sizeof (buf));
|
||||
g_string_append_printf (gstr, ngettext ("%1$s; %2$'d File",
|
||||
"%1$s; %2$'d Files",
|
||||
builder->fileCount),
|
||||
buf, builder->fileCount);
|
||||
g_string_append (gstr, "; ");
|
||||
char buf[128];
|
||||
tr_strlsize (buf, builder->totalSize, sizeof (buf));
|
||||
g_string_append_printf (gstr, ngettext ("%1$s; %2$'d File",
|
||||
"%1$s; %2$'d Files",
|
||||
builder->fileCount),
|
||||
buf, builder->fileCount);
|
||||
g_string_append (gstr, "; ");
|
||||
|
||||
tr_formatter_mem_B (buf, builder->pieceSize, sizeof (buf));
|
||||
g_string_append_printf (gstr, ngettext ("%1$'d Piece @ %2$s",
|
||||
"%1$'d Pieces @ %2$s",
|
||||
builder->pieceCount),
|
||||
builder->pieceCount, buf);
|
||||
tr_formatter_mem_B (buf, builder->pieceSize, sizeof (buf));
|
||||
g_string_append_printf (gstr, ngettext ("%1$'d Piece @ %2$s",
|
||||
"%1$'d Pieces @ %2$s",
|
||||
builder->pieceCount),
|
||||
builder->pieceCount, buf);
|
||||
}
|
||||
g_string_append (gstr, "</i>");
|
||||
gtk_label_set_markup (GTK_LABEL (ui->pieces_lb), gstr->str);
|
||||
g_string_free (gstr, TRUE);
|
||||
|
||||
g_string_append (gstr, "</i>");
|
||||
gtk_label_set_markup (GTK_LABEL (ui->pieces_lb), gstr->str);
|
||||
g_string_free (gstr, TRUE);
|
||||
}
|
||||
|
||||
static void
|
||||
setFilename (MakeMetaUI * ui, const char * filename)
|
||||
{
|
||||
if (ui->builder) {
|
||||
tr_metaInfoBuilderFree (ui->builder);
|
||||
ui->builder = NULL;
|
||||
}
|
||||
g_clear_pointer (&ui->builder, (GDestroyNotify)tr_metaInfoBuilderFree);
|
||||
|
||||
if (filename)
|
||||
ui->builder = tr_metaInfoBuilderCreate (filename);
|
||||
if (filename)
|
||||
ui->builder = tr_metaInfoBuilderCreate (filename);
|
||||
|
||||
updatePiecesLabel (ui);
|
||||
updatePiecesLabel (ui);
|
||||
}
|
||||
|
||||
static void
|
||||
onChooserChosen (GtkFileChooser * chooser, gpointer user_data)
|
||||
{
|
||||
char * filename;
|
||||
MakeMetaUI * ui = user_data;
|
||||
char * filename;
|
||||
MakeMetaUI * ui = user_data;
|
||||
|
||||
g_object_set_data (G_OBJECT (chooser), FILE_CHOSEN_KEY,
|
||||
GINT_TO_POINTER (TRUE));
|
||||
g_object_set_data (G_OBJECT (chooser), FILE_CHOSEN_KEY,
|
||||
GINT_TO_POINTER (TRUE));
|
||||
|
||||
filename = gtk_file_chooser_get_filename (chooser);
|
||||
setFilename (ui, filename);
|
||||
g_free (filename);
|
||||
filename = gtk_file_chooser_get_filename (chooser);
|
||||
setFilename (ui, filename);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
static void
|
||||
onSourceToggled2 (GtkToggleButton * tb, GtkWidget * chooser, MakeMetaUI * ui)
|
||||
{
|
||||
if (gtk_toggle_button_get_active (tb))
|
||||
if (gtk_toggle_button_get_active (tb))
|
||||
{
|
||||
if (g_object_get_data (G_OBJECT (chooser), FILE_CHOSEN_KEY) != NULL)
|
||||
onChooserChosen (GTK_FILE_CHOOSER (chooser), ui);
|
||||
else
|
||||
setFilename (ui, NULL);
|
||||
if (g_object_get_data (G_OBJECT (chooser), FILE_CHOSEN_KEY) != NULL)
|
||||
onChooserChosen (GTK_FILE_CHOOSER (chooser), ui);
|
||||
else
|
||||
setFilename (ui, NULL);
|
||||
}
|
||||
}
|
||||
static void
|
||||
onFolderToggled (GtkToggleButton * tb, gpointer data)
|
||||
{
|
||||
MakeMetaUI * ui = data;
|
||||
onSourceToggled2 (tb, ui->folder_chooser, ui);
|
||||
MakeMetaUI * ui = data;
|
||||
onSourceToggled2 (tb, ui->folder_chooser, ui);
|
||||
}
|
||||
static void
|
||||
onFileToggled (GtkToggleButton * tb, gpointer data)
|
||||
{
|
||||
MakeMetaUI * ui = data;
|
||||
onSourceToggled2 (tb, ui->file_chooser, ui);
|
||||
MakeMetaUI * ui = data;
|
||||
onSourceToggled2 (tb, ui->file_chooser, ui);
|
||||
}
|
||||
|
||||
static const char *
|
||||
getDefaultSavePath (void)
|
||||
{
|
||||
return g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
|
||||
return g_get_user_special_dir (G_USER_DIRECTORY_DESKTOP);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -381,137 +388,137 @@ on_drag_data_received (GtkWidget * widget UNUSED,
|
|||
guint time_,
|
||||
gpointer user_data)
|
||||
{
|
||||
gboolean success = FALSE;
|
||||
MakeMetaUI * ui = user_data;
|
||||
char ** uris = gtk_selection_data_get_uris (selection_data);
|
||||
gboolean success = FALSE;
|
||||
MakeMetaUI * ui = user_data;
|
||||
char ** uris = gtk_selection_data_get_uris (selection_data);
|
||||
|
||||
if (uris && uris[0])
|
||||
if (uris && uris[0])
|
||||
{
|
||||
const char * uri = uris[ 0 ];
|
||||
gchar * filename = g_filename_from_uri (uri, NULL, NULL);
|
||||
const char * uri = uris[ 0 ];
|
||||
gchar * filename = g_filename_from_uri (uri, NULL, NULL);
|
||||
|
||||
if (g_file_test (filename, G_FILE_TEST_IS_DIR))
|
||||
if (g_file_test (filename, G_FILE_TEST_IS_DIR))
|
||||
{
|
||||
/* a directory was dragged onto the dialog... */
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->folder_radio), TRUE);
|
||||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (ui->folder_chooser), filename);
|
||||
success = TRUE;
|
||||
/* a directory was dragged onto the dialog... */
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->folder_radio), TRUE);
|
||||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (ui->folder_chooser), filename);
|
||||
success = TRUE;
|
||||
}
|
||||
else if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
|
||||
else if (g_file_test (filename, G_FILE_TEST_IS_REGULAR))
|
||||
{
|
||||
/* a file was dragged on to the dialog... */
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->file_radio), TRUE);
|
||||
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (ui->file_chooser), filename);
|
||||
success = TRUE;
|
||||
/* a file was dragged on to the dialog... */
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ui->file_radio), TRUE);
|
||||
gtk_file_chooser_set_filename (GTK_FILE_CHOOSER (ui->file_chooser), filename);
|
||||
success = TRUE;
|
||||
}
|
||||
|
||||
g_free (filename);
|
||||
g_free (filename);
|
||||
}
|
||||
|
||||
g_strfreev (uris);
|
||||
gtk_drag_finish (drag_context, success, FALSE, time_);
|
||||
g_strfreev (uris);
|
||||
gtk_drag_finish (drag_context, success, FALSE, time_);
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
gtr_torrent_creation_dialog_new (GtkWindow * parent, TrCore * core)
|
||||
{
|
||||
const char * str;
|
||||
GtkWidget * d, *t, *w, *l, *fr, *sw, *v;
|
||||
GSList * slist;
|
||||
guint row = 0;
|
||||
MakeMetaUI * ui = g_new0 (MakeMetaUI, 1);
|
||||
const char * str;
|
||||
GtkWidget * d, *t, *w, *l, *fr, *sw, *v;
|
||||
GSList * slist;
|
||||
guint row = 0;
|
||||
MakeMetaUI * ui = g_new0 (MakeMetaUI, 1);
|
||||
|
||||
ui->core = core;
|
||||
ui->core = core;
|
||||
|
||||
d = gtk_dialog_new_with_buttons (_("New Torrent"),
|
||||
parent,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
GTK_STOCK_NEW, GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
ui->dialog = d;
|
||||
g_signal_connect (d, "response", G_CALLBACK (onResponse), ui);
|
||||
g_object_set_data_full (G_OBJECT (d), "ui", ui, freeMetaUI);
|
||||
d = gtk_dialog_new_with_buttons (_("New Torrent"),
|
||||
parent,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
GTK_STOCK_NEW, GTK_RESPONSE_ACCEPT,
|
||||
NULL);
|
||||
ui->dialog = d;
|
||||
g_signal_connect (d, "response", G_CALLBACK (onResponse), ui);
|
||||
g_object_set_data_full (G_OBJECT (d), "ui", ui, freeMetaUI);
|
||||
|
||||
t = hig_workarea_create ();
|
||||
t = hig_workarea_create ();
|
||||
|
||||
hig_workarea_add_section_title (t, &row, _("Files"));
|
||||
hig_workarea_add_section_title (t, &row, _("Files"));
|
||||
|
||||
str = _("Sa_ve to:");
|
||||
w = gtk_file_chooser_button_new (NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (w), getDefaultSavePath ());
|
||||
ui->destination_chooser = w;
|
||||
hig_workarea_add_row (t, &row, str, w, NULL);
|
||||
str = _("Sa_ve to:");
|
||||
w = gtk_file_chooser_button_new (NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (w), getDefaultSavePath ());
|
||||
ui->destination_chooser = w;
|
||||
hig_workarea_add_row (t, &row, str, w, NULL);
|
||||
|
||||
l = gtk_radio_button_new_with_mnemonic (NULL, _("Source F_older:"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l), FALSE);
|
||||
w = gtk_file_chooser_button_new (NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onFolderToggled), ui);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onSourceToggled), w);
|
||||
g_signal_connect (w, "selection-changed", G_CALLBACK (onChooserChosen), ui);
|
||||
ui->folder_radio = l;
|
||||
ui->folder_chooser = w;
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (w), FALSE);
|
||||
hig_workarea_add_row_w (t, &row, l, w, NULL);
|
||||
l = gtk_radio_button_new_with_mnemonic (NULL, _("Source F_older:"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l), FALSE);
|
||||
w = gtk_file_chooser_button_new (NULL, GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onFolderToggled), ui);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onSourceToggled), w);
|
||||
g_signal_connect (w, "selection-changed", G_CALLBACK (onChooserChosen), ui);
|
||||
ui->folder_radio = l;
|
||||
ui->folder_chooser = w;
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (w), FALSE);
|
||||
hig_workarea_add_row_w (t, &row, l, w, NULL);
|
||||
|
||||
slist = gtk_radio_button_get_group (GTK_RADIO_BUTTON (l)),
|
||||
l = gtk_radio_button_new_with_mnemonic (slist, _("Source _File:"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l), TRUE);
|
||||
w = gtk_file_chooser_button_new (NULL, GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onFileToggled), ui);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onSourceToggled), w);
|
||||
g_signal_connect (w, "selection-changed", G_CALLBACK (onChooserChosen), ui);
|
||||
ui->file_radio = l;
|
||||
ui->file_chooser = w;
|
||||
hig_workarea_add_row_w (t, &row, l, w, NULL);
|
||||
slist = gtk_radio_button_get_group (GTK_RADIO_BUTTON (l)),
|
||||
l = gtk_radio_button_new_with_mnemonic (slist, _("Source _File:"));
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l), TRUE);
|
||||
w = gtk_file_chooser_button_new (NULL, GTK_FILE_CHOOSER_ACTION_OPEN);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onFileToggled), ui);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onSourceToggled), w);
|
||||
g_signal_connect (w, "selection-changed", G_CALLBACK (onChooserChosen), ui);
|
||||
ui->file_radio = l;
|
||||
ui->file_chooser = w;
|
||||
hig_workarea_add_row_w (t, &row, l, w, NULL);
|
||||
|
||||
w = gtk_label_new (NULL);
|
||||
ui->pieces_lb = w;
|
||||
gtk_label_set_markup (GTK_LABEL (w), _("<i>No source selected</i>"));
|
||||
hig_workarea_add_row (t, &row, NULL, w, NULL);
|
||||
w = gtk_label_new (NULL);
|
||||
ui->pieces_lb = w;
|
||||
gtk_label_set_markup (GTK_LABEL (w), _("<i>No source selected</i>"));
|
||||
hig_workarea_add_row (t, &row, NULL, w, NULL);
|
||||
|
||||
hig_workarea_add_section_divider (t, &row);
|
||||
hig_workarea_add_section_title (t, &row, _("Properties"));
|
||||
hig_workarea_add_section_divider (t, &row);
|
||||
hig_workarea_add_section_title (t, &row, _("Properties"));
|
||||
|
||||
str = _("_Trackers:");
|
||||
v = gtk_box_new (GTK_ORIENTATION_VERTICAL, GUI_PAD_SMALL);
|
||||
ui->announce_text_buffer = gtk_text_buffer_new (NULL);
|
||||
w = gtk_text_view_new_with_buffer (ui->announce_text_buffer);
|
||||
gtk_widget_set_size_request (w, -1, 80);
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_container_add (GTK_CONTAINER (sw), w);
|
||||
fr = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (fr), GTK_SHADOW_IN);
|
||||
gtk_container_add (GTK_CONTAINER (fr), sw);
|
||||
gtk_box_pack_start (GTK_BOX (v), fr, TRUE, TRUE, 0);
|
||||
l = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (l), _("To add a backup URL, add it on the line after the primary URL.\n"
|
||||
"To add another primary URL, add it after a blank line."));
|
||||
gtk_label_set_justify (GTK_LABEL (l), GTK_JUSTIFY_LEFT);
|
||||
gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
|
||||
gtk_box_pack_start (GTK_BOX (v), l, FALSE, FALSE, 0);
|
||||
hig_workarea_add_tall_row (t, &row, str, v, NULL);
|
||||
str = _("_Trackers:");
|
||||
v = gtk_box_new (GTK_ORIENTATION_VERTICAL, GUI_PAD_SMALL);
|
||||
ui->announce_text_buffer = gtk_text_buffer_new (NULL);
|
||||
w = gtk_text_view_new_with_buffer (ui->announce_text_buffer);
|
||||
gtk_widget_set_size_request (w, -1, 80);
|
||||
sw = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
|
||||
GTK_POLICY_AUTOMATIC,
|
||||
GTK_POLICY_AUTOMATIC);
|
||||
gtk_container_add (GTK_CONTAINER (sw), w);
|
||||
fr = gtk_frame_new (NULL);
|
||||
gtk_frame_set_shadow_type (GTK_FRAME (fr), GTK_SHADOW_IN);
|
||||
gtk_container_add (GTK_CONTAINER (fr), sw);
|
||||
gtk_box_pack_start (GTK_BOX (v), fr, TRUE, TRUE, 0);
|
||||
l = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (l), _("To add a backup URL, add it on the line after the primary URL.\n"
|
||||
"To add another primary URL, add it after a blank line."));
|
||||
gtk_label_set_justify (GTK_LABEL (l), GTK_JUSTIFY_LEFT);
|
||||
gtk_misc_set_alignment (GTK_MISC (l), 0.0, 0.5);
|
||||
gtk_box_pack_start (GTK_BOX (v), l, FALSE, FALSE, 0);
|
||||
hig_workarea_add_tall_row (t, &row, str, v, NULL);
|
||||
|
||||
l = gtk_check_button_new_with_mnemonic (_("Co_mment:"));
|
||||
ui->comment_check = l;
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l), FALSE);
|
||||
w = gtk_entry_new ();
|
||||
ui->comment_entry = w;
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (w), FALSE);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onSourceToggled), w);
|
||||
hig_workarea_add_row_w (t, &row, l, w, NULL);
|
||||
l = gtk_check_button_new_with_mnemonic (_("Co_mment:"));
|
||||
ui->comment_check = l;
|
||||
gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (l), FALSE);
|
||||
w = gtk_entry_new ();
|
||||
ui->comment_entry = w;
|
||||
gtk_widget_set_sensitive (GTK_WIDGET (w), FALSE);
|
||||
g_signal_connect (l, "toggled", G_CALLBACK (onSourceToggled), w);
|
||||
hig_workarea_add_row_w (t, &row, l, w, NULL);
|
||||
|
||||
w = hig_workarea_add_wide_checkbutton (t, &row, _("_Private torrent"), FALSE);
|
||||
ui->private_check = w;
|
||||
w = hig_workarea_add_wide_checkbutton (t, &row, _("_Private torrent"), FALSE);
|
||||
ui->private_check = w;
|
||||
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), t);
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), t);
|
||||
|
||||
gtk_drag_dest_set (d, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY);
|
||||
gtk_drag_dest_add_uri_targets (d);
|
||||
g_signal_connect (d, "drag-data-received", G_CALLBACK (on_drag_data_received), ui);
|
||||
gtk_drag_dest_set (d, GTK_DEST_DEFAULT_ALL, NULL, 0, GDK_ACTION_COPY);
|
||||
gtk_drag_dest_add_uri_targets (d);
|
||||
g_signal_connect (d, "drag-data-received", G_CALLBACK (on_drag_data_received), ui);
|
||||
|
||||
return d;
|
||||
return d;
|
||||
}
|
||||
|
|
28
gtk/msgwin.c
28
gtk/msgwin.c
|
@ -28,23 +28,23 @@
|
|||
|
||||
enum
|
||||
{
|
||||
COL_SEQUENCE,
|
||||
COL_NAME,
|
||||
COL_MESSAGE,
|
||||
COL_TR_MSG,
|
||||
N_COLUMNS
|
||||
COL_SEQUENCE,
|
||||
COL_NAME,
|
||||
COL_MESSAGE,
|
||||
COL_TR_MSG,
|
||||
N_COLUMNS
|
||||
};
|
||||
|
||||
struct MsgData
|
||||
{
|
||||
TrCore * core;
|
||||
GtkTreeView * view;
|
||||
GtkListStore * store;
|
||||
GtkTreeModel * filter;
|
||||
GtkTreeModel * sort;
|
||||
tr_msg_level maxLevel;
|
||||
gboolean isPaused;
|
||||
guint refresh_tag;
|
||||
TrCore * core;
|
||||
GtkTreeView * view;
|
||||
GtkListStore * store;
|
||||
GtkTreeModel * filter;
|
||||
GtkTreeModel * sort;
|
||||
tr_msg_level maxLevel;
|
||||
gboolean isPaused;
|
||||
guint refresh_tag;
|
||||
};
|
||||
|
||||
static struct tr_msg_list * myTail = NULL;
|
||||
|
@ -64,7 +64,7 @@ is_pinned_to_new (struct MsgData * data)
|
|||
{
|
||||
pinned_to_new = TRUE;
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
GtkTreePath * last_visible;
|
||||
if (gtk_tree_view_get_visible_range (data->view, NULL, &last_visible))
|
||||
|
|
212
gtk/relocate.c
212
gtk/relocate.c
|
@ -26,20 +26,20 @@ static char * previousLocation = NULL;
|
|||
|
||||
struct relocate_dialog_data
|
||||
{
|
||||
int done;
|
||||
bool do_move;
|
||||
TrCore * core;
|
||||
GSList * torrent_ids;
|
||||
GtkWidget * message_dialog;
|
||||
GtkWidget * chooser_dialog;
|
||||
int done;
|
||||
bool do_move;
|
||||
TrCore * core;
|
||||
GSList * torrent_ids;
|
||||
GtkWidget * message_dialog;
|
||||
GtkWidget * chooser_dialog;
|
||||
};
|
||||
|
||||
static void
|
||||
data_free (gpointer gdata)
|
||||
{
|
||||
struct relocate_dialog_data * data = gdata;
|
||||
g_slist_free (data->torrent_ids);
|
||||
g_free (data);
|
||||
struct relocate_dialog_data * data = gdata;
|
||||
g_slist_free (data->torrent_ids);
|
||||
g_free (data);
|
||||
}
|
||||
|
||||
/***
|
||||
|
@ -49,19 +49,19 @@ data_free (gpointer gdata)
|
|||
static void
|
||||
startMovingNextTorrent (struct relocate_dialog_data * data)
|
||||
{
|
||||
char * str;
|
||||
const int id = GPOINTER_TO_INT (data->torrent_ids->data);
|
||||
char * str;
|
||||
const int id = GPOINTER_TO_INT (data->torrent_ids->data);
|
||||
|
||||
tr_torrent * tor = gtr_core_find_torrent (data->core, id);
|
||||
if (tor != NULL)
|
||||
tr_torrentSetLocation (tor, previousLocation, data->do_move, NULL, &data->done);
|
||||
tr_torrent * tor = gtr_core_find_torrent (data->core, id);
|
||||
if (tor != NULL)
|
||||
tr_torrentSetLocation (tor, previousLocation, data->do_move, NULL, &data->done);
|
||||
|
||||
data->torrent_ids = g_slist_delete_link (data->torrent_ids,
|
||||
data->torrent_ids);
|
||||
data->torrent_ids = g_slist_delete_link (data->torrent_ids,
|
||||
data->torrent_ids);
|
||||
|
||||
str = g_strdup_printf (_("Moving \"%s\""), tr_torrentName (tor));
|
||||
gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (data->message_dialog), str);
|
||||
g_free (str);
|
||||
str = g_strdup_printf (_("Moving \"%s\""), tr_torrentName (tor));
|
||||
gtk_message_dialog_set_markup (GTK_MESSAGE_DIALOG (data->message_dialog), str);
|
||||
g_free (str);
|
||||
}
|
||||
|
||||
/* every once in awhile, check to see if the move is done.
|
||||
|
@ -69,76 +69,70 @@ startMovingNextTorrent (struct relocate_dialog_data * data)
|
|||
static gboolean
|
||||
onTimer (gpointer gdata)
|
||||
{
|
||||
struct relocate_dialog_data * data = gdata;
|
||||
const int done = data->done;
|
||||
struct relocate_dialog_data * data = gdata;
|
||||
const int done = data->done;
|
||||
|
||||
if (done == TR_LOC_ERROR)
|
||||
if (done == TR_LOC_ERROR)
|
||||
{
|
||||
const int flags = GTK_DIALOG_MODAL
|
||||
| GTK_DIALOG_DESTROY_WITH_PARENT;
|
||||
GtkWidget * w = gtk_message_dialog_new (GTK_WINDOW (data->message_dialog),
|
||||
flags,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s",
|
||||
_("Couldn't move torrent"));
|
||||
gtk_dialog_run (GTK_DIALOG (w));
|
||||
gtk_widget_destroy (GTK_WIDGET (data->message_dialog));
|
||||
return FALSE;
|
||||
const int flags = GTK_DIALOG_MODAL
|
||||
| GTK_DIALOG_DESTROY_WITH_PARENT;
|
||||
GtkWidget * w = gtk_message_dialog_new (GTK_WINDOW (data->message_dialog),
|
||||
flags,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s",
|
||||
_("Couldn't move torrent"));
|
||||
gtk_dialog_run (GTK_DIALOG (w));
|
||||
gtk_widget_destroy (GTK_WIDGET (data->message_dialog));
|
||||
}
|
||||
else if (done == TR_LOC_DONE)
|
||||
{
|
||||
if (data->torrent_ids != NULL)
|
||||
{
|
||||
startMovingNextTorrent (data);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_widget_destroy (GTK_WIDGET (data->chooser_dialog));
|
||||
return FALSE;
|
||||
}
|
||||
if (data->torrent_ids != NULL)
|
||||
startMovingNextTorrent (data);
|
||||
else
|
||||
gtk_widget_destroy (GTK_WIDGET (data->chooser_dialog));
|
||||
}
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static void
|
||||
onResponse (GtkDialog * dialog, int response, gpointer unused UNUSED)
|
||||
{
|
||||
if (response == GTK_RESPONSE_APPLY)
|
||||
if (response == GTK_RESPONSE_APPLY)
|
||||
{
|
||||
GtkWidget * w;
|
||||
GObject * d = G_OBJECT (dialog);
|
||||
struct relocate_dialog_data * data = g_object_get_data (d, DATA_KEY);
|
||||
GtkFileChooser * chooser = g_object_get_data (d, "chooser");
|
||||
GtkToggleButton * move_tb = g_object_get_data (d, "move_rb");
|
||||
char * location = gtk_file_chooser_get_filename (chooser);
|
||||
GtkWidget * w;
|
||||
GObject * d = G_OBJECT (dialog);
|
||||
struct relocate_dialog_data * data = g_object_get_data (d, DATA_KEY);
|
||||
GtkFileChooser * chooser = g_object_get_data (d, "chooser");
|
||||
GtkToggleButton * move_tb = g_object_get_data (d, "move_rb");
|
||||
char * location = gtk_file_chooser_get_filename (chooser);
|
||||
|
||||
data->do_move = gtk_toggle_button_get_active (move_tb);
|
||||
data->do_move = gtk_toggle_button_get_active (move_tb);
|
||||
|
||||
/* pop up a dialog saying that the work is in progress */
|
||||
w = gtk_message_dialog_new (GTK_WINDOW (dialog),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
NULL);
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), _("This may take a moment…"));
|
||||
gtk_dialog_set_response_sensitive (GTK_DIALOG (w), GTK_RESPONSE_CLOSE, FALSE);
|
||||
gtk_widget_show (w);
|
||||
/* pop up a dialog saying that the work is in progress */
|
||||
w = gtk_message_dialog_new (GTK_WINDOW (dialog),
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT | GTK_DIALOG_MODAL,
|
||||
GTK_MESSAGE_INFO,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
NULL);
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), _("This may take a moment…"));
|
||||
gtk_dialog_set_response_sensitive (GTK_DIALOG (w), GTK_RESPONSE_CLOSE, FALSE);
|
||||
gtk_widget_show (w);
|
||||
|
||||
/* remember this location so that it can be the default next time */
|
||||
g_free (previousLocation);
|
||||
previousLocation = location;
|
||||
/* remember this location so that it can be the default next time */
|
||||
g_free (previousLocation);
|
||||
previousLocation = location;
|
||||
|
||||
/* start the move and periodically check its status */
|
||||
data->message_dialog = w;
|
||||
data->done = TR_LOC_DONE;
|
||||
onTimer (data);
|
||||
gdk_threads_add_timeout_seconds (1, onTimer, data);
|
||||
/* start the move and periodically check its status */
|
||||
data->message_dialog = w;
|
||||
data->done = TR_LOC_DONE;
|
||||
onTimer (data);
|
||||
gdk_threads_add_timeout_seconds (1, onTimer, data);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -147,48 +141,48 @@ gtr_relocate_dialog_new (GtkWindow * parent,
|
|||
TrCore * core,
|
||||
GSList * torrent_ids)
|
||||
{
|
||||
guint row;
|
||||
GtkWidget * w;
|
||||
GtkWidget * d;
|
||||
GtkWidget * t;
|
||||
struct relocate_dialog_data * data;
|
||||
guint row;
|
||||
GtkWidget * w;
|
||||
GtkWidget * d;
|
||||
GtkWidget * t;
|
||||
struct relocate_dialog_data * data;
|
||||
|
||||
d = gtk_dialog_new_with_buttons (_("Set Torrent Location"), parent,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT |
|
||||
GTK_DIALOG_MODAL,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
|
||||
NULL);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_CANCEL);
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_APPLY,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
g_signal_connect (d, "response", G_CALLBACK (onResponse), NULL);
|
||||
d = gtk_dialog_new_with_buttons (_("Set Torrent Location"), parent,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT |
|
||||
GTK_DIALOG_MODAL,
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
GTK_STOCK_APPLY, GTK_RESPONSE_APPLY,
|
||||
NULL);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_CANCEL);
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_APPLY,
|
||||
GTK_RESPONSE_CANCEL,
|
||||
-1);
|
||||
g_signal_connect (d, "response", G_CALLBACK (onResponse), NULL);
|
||||
|
||||
row = 0;
|
||||
t = hig_workarea_create ();
|
||||
hig_workarea_add_section_title (t, &row, _("Location"));
|
||||
row = 0;
|
||||
t = hig_workarea_create ();
|
||||
hig_workarea_add_section_title (t, &row, _("Location"));
|
||||
|
||||
if (previousLocation == NULL)
|
||||
previousLocation = g_strdup (gtr_pref_string_get (TR_KEY_download_dir));
|
||||
w = gtk_file_chooser_button_new (_("Set Torrent Location"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (w), previousLocation);
|
||||
g_object_set_data (G_OBJECT (d), "chooser", w);
|
||||
hig_workarea_add_row (t, &row, _("Torrent _location:"), w, NULL);
|
||||
w = gtk_radio_button_new_with_mnemonic (NULL, _("_Move from the current folder"));
|
||||
g_object_set_data (G_OBJECT (d), "move_rb", w);
|
||||
hig_workarea_add_wide_control (t, &row, w);
|
||||
w = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (w), _("Local data is _already there"));
|
||||
hig_workarea_add_wide_control (t, &row, w);
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), t);
|
||||
if (previousLocation == NULL)
|
||||
previousLocation = g_strdup (gtr_pref_string_get (TR_KEY_download_dir));
|
||||
w = gtk_file_chooser_button_new (_("Set Torrent Location"), GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER);
|
||||
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (w), previousLocation);
|
||||
g_object_set_data (G_OBJECT (d), "chooser", w);
|
||||
hig_workarea_add_row (t, &row, _("Torrent _location:"), w, NULL);
|
||||
w = gtk_radio_button_new_with_mnemonic (NULL, _("_Move from the current folder"));
|
||||
g_object_set_data (G_OBJECT (d), "move_rb", w);
|
||||
hig_workarea_add_wide_control (t, &row, w);
|
||||
w = gtk_radio_button_new_with_mnemonic_from_widget (GTK_RADIO_BUTTON (w), _("Local data is _already there"));
|
||||
hig_workarea_add_wide_control (t, &row, w);
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), t);
|
||||
|
||||
data = g_new0 (struct relocate_dialog_data, 1);
|
||||
data->core = core;
|
||||
data->torrent_ids = torrent_ids;
|
||||
data->chooser_dialog = d;
|
||||
g_object_set_data_full (G_OBJECT (d), DATA_KEY, data, data_free);
|
||||
data = g_new0 (struct relocate_dialog_data, 1);
|
||||
data->core = core;
|
||||
data->torrent_ids = torrent_ids;
|
||||
data->chooser_dialog = d;
|
||||
g_object_set_data_full (G_OBJECT (d), DATA_KEY, data, data_free);
|
||||
|
||||
return d;
|
||||
return d;
|
||||
}
|
||||
|
|
225
gtk/stats.c
225
gtk/stats.c
|
@ -49,151 +49,150 @@ setLabel (GtkLabel * l, const char * str)
|
|||
static void
|
||||
setLabelFromRatio (GtkLabel * l, double d)
|
||||
{
|
||||
char buf[128];
|
||||
char buf[128];
|
||||
|
||||
tr_strlratio (buf, d, sizeof (buf));
|
||||
setLabel (l, buf);
|
||||
tr_strlratio (buf, d, sizeof (buf));
|
||||
setLabel (l, buf);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
updateStats (gpointer gdata)
|
||||
{
|
||||
char buf[128];
|
||||
const char * fmt;
|
||||
tr_session_stats one, all;
|
||||
const size_t buflen = sizeof (buf);
|
||||
struct stat_ui * ui = gdata;
|
||||
char buf[128];
|
||||
const char * fmt;
|
||||
tr_session_stats one, all;
|
||||
const size_t buflen = sizeof (buf);
|
||||
struct stat_ui * ui = gdata;
|
||||
|
||||
tr_sessionGetStats (gtr_core_session (ui->core), &one);
|
||||
tr_sessionGetCumulativeStats (gtr_core_session (ui->core), &all);
|
||||
tr_sessionGetStats (gtr_core_session (ui->core), &one);
|
||||
tr_sessionGetCumulativeStats (gtr_core_session (ui->core), &all);
|
||||
|
||||
setLabel (ui->one_up_lb, tr_strlsize (buf, one.uploadedBytes, buflen));
|
||||
setLabel (ui->one_down_lb, tr_strlsize (buf, one.downloadedBytes, buflen));
|
||||
setLabel (ui->one_time_lb, tr_strltime (buf, one.secondsActive, buflen));
|
||||
setLabelFromRatio (ui->one_ratio_lb, one.ratio);
|
||||
setLabel (ui->one_up_lb, tr_strlsize (buf, one.uploadedBytes, buflen));
|
||||
setLabel (ui->one_down_lb, tr_strlsize (buf, one.downloadedBytes, buflen));
|
||||
setLabel (ui->one_time_lb, tr_strltime (buf, one.secondsActive, buflen));
|
||||
setLabelFromRatio (ui->one_ratio_lb, one.ratio);
|
||||
|
||||
fmt = ngettext ("Started %'d time", "Started %'d times",
|
||||
(int)all.sessionCount);
|
||||
g_snprintf (buf, buflen, fmt, (int)all.sessionCount);
|
||||
setLabel (ui->all_sessions_lb, buf);
|
||||
setLabel (ui->all_up_lb, tr_strlsize (buf, all.uploadedBytes, buflen));
|
||||
setLabel (ui->all_down_lb, tr_strlsize (buf, all.downloadedBytes, buflen));
|
||||
setLabel (ui->all_time_lb, tr_strltime (buf, all.secondsActive, buflen));
|
||||
setLabelFromRatio (ui->all_ratio_lb, all.ratio);
|
||||
fmt = ngettext ("Started %'d time", "Started %'d times", (int)all.sessionCount);
|
||||
g_snprintf (buf, buflen, fmt, (int)all.sessionCount);
|
||||
setLabel (ui->all_sessions_lb, buf);
|
||||
setLabel (ui->all_up_lb, tr_strlsize (buf, all.uploadedBytes, buflen));
|
||||
setLabel (ui->all_down_lb, tr_strlsize (buf, all.downloadedBytes, buflen));
|
||||
setLabel (ui->all_time_lb, tr_strltime (buf, all.secondsActive, buflen));
|
||||
setLabelFromRatio (ui->all_ratio_lb, all.ratio);
|
||||
|
||||
return G_SOURCE_CONTINUE;
|
||||
return G_SOURCE_CONTINUE;
|
||||
}
|
||||
|
||||
static void
|
||||
dialogDestroyed (gpointer p, GObject * dialog UNUSED)
|
||||
{
|
||||
g_source_remove (GPOINTER_TO_UINT (p));
|
||||
g_source_remove (GPOINTER_TO_UINT (p));
|
||||
}
|
||||
|
||||
static void
|
||||
dialogResponse (GtkDialog * dialog, gint response, gpointer gdata)
|
||||
{
|
||||
struct stat_ui * ui = gdata;
|
||||
struct stat_ui * ui = gdata;
|
||||
|
||||
if (response == TR_RESPONSE_RESET)
|
||||
if (response == TR_RESPONSE_RESET)
|
||||
{
|
||||
const char * primary = _("Reset your statistics?");
|
||||
const char * secondary = _("These statistics are for your information only. "
|
||||
"Resetting them doesn't affect the statistics logged by your BitTorrent trackers.");
|
||||
const int flags = GTK_DIALOG_DESTROY_WITH_PARENT
|
||||
| GTK_DIALOG_MODAL;
|
||||
GtkWidget * w = gtk_message_dialog_new (GTK_WINDOW (dialog),
|
||||
flags,
|
||||
GTK_MESSAGE_QUESTION,
|
||||
GTK_BUTTONS_NONE,
|
||||
"%s", primary);
|
||||
gtk_dialog_add_buttons (GTK_DIALOG (w),
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
_("_Reset"), TR_RESPONSE_RESET,
|
||||
NULL);
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), "%s", secondary);
|
||||
if (gtk_dialog_run (GTK_DIALOG (w)) == TR_RESPONSE_RESET)
|
||||
const char * primary = _("Reset your statistics?");
|
||||
const char * secondary = _("These statistics are for your information only. "
|
||||
"Resetting them doesn't affect the statistics logged by your BitTorrent trackers.");
|
||||
const int flags = GTK_DIALOG_DESTROY_WITH_PARENT
|
||||
| GTK_DIALOG_MODAL;
|
||||
GtkWidget * w = gtk_message_dialog_new (GTK_WINDOW (dialog),
|
||||
flags,
|
||||
GTK_MESSAGE_QUESTION,
|
||||
GTK_BUTTONS_NONE,
|
||||
"%s", primary);
|
||||
gtk_dialog_add_buttons (GTK_DIALOG (w),
|
||||
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
|
||||
_("_Reset"), TR_RESPONSE_RESET,
|
||||
NULL);
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), "%s", secondary);
|
||||
if (gtk_dialog_run (GTK_DIALOG (w)) == TR_RESPONSE_RESET)
|
||||
{
|
||||
tr_sessionClearStats (gtr_core_session (ui->core));
|
||||
updateStats (ui);
|
||||
tr_sessionClearStats (gtr_core_session (ui->core));
|
||||
updateStats (ui);
|
||||
}
|
||||
gtk_widget_destroy (w);
|
||||
gtk_widget_destroy (w);
|
||||
}
|
||||
|
||||
if (response == GTK_RESPONSE_CLOSE)
|
||||
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||
if (response == GTK_RESPONSE_CLOSE)
|
||||
gtk_widget_destroy (GTK_WIDGET (dialog));
|
||||
}
|
||||
|
||||
GtkWidget*
|
||||
gtr_stats_dialog_new (GtkWindow * parent, TrCore * core)
|
||||
{
|
||||
guint i;
|
||||
GtkWidget * d;
|
||||
GtkWidget * t;
|
||||
GtkWidget * l;
|
||||
guint row = 0;
|
||||
struct stat_ui * ui = g_new0 (struct stat_ui, 1);
|
||||
guint i;
|
||||
GtkWidget * d;
|
||||
GtkWidget * t;
|
||||
GtkWidget * l;
|
||||
guint row = 0;
|
||||
struct stat_ui * ui = g_new0 (struct stat_ui, 1);
|
||||
|
||||
d = gtk_dialog_new_with_buttons (_("Statistics"),
|
||||
parent,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
_("_Reset"), TR_RESPONSE_RESET,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
NULL);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_CLOSE);
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_CLOSE,
|
||||
TR_RESPONSE_RESET,
|
||||
-1);
|
||||
t = hig_workarea_create ();
|
||||
ui->core = core;
|
||||
d = gtk_dialog_new_with_buttons (_("Statistics"),
|
||||
parent,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
_("_Reset"), TR_RESPONSE_RESET,
|
||||
GTK_STOCK_CLOSE, GTK_RESPONSE_CLOSE,
|
||||
NULL);
|
||||
gtk_dialog_set_default_response (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_CLOSE);
|
||||
gtk_dialog_set_alternative_button_order (GTK_DIALOG (d),
|
||||
GTK_RESPONSE_CLOSE,
|
||||
TR_RESPONSE_RESET,
|
||||
-1);
|
||||
t = hig_workarea_create ();
|
||||
ui->core = core;
|
||||
|
||||
hig_workarea_add_section_title (t, &row, _("Current Session"));
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_up_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_up_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Uploaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_down_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_down_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Downloaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_ratio_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_ratio_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Ratio:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_time_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_time_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Duration:"), l, NULL);
|
||||
hig_workarea_add_section_divider (t, &row);
|
||||
hig_workarea_add_section_title (t, &row, _("Total"));
|
||||
l = gtk_label_new (_("Started %'d time"));
|
||||
ui->all_sessions_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_sessions_lb, TRUE);
|
||||
hig_workarea_add_label_w (t, row++, l);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_up_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_up_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Uploaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_down_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_down_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Downloaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_ratio_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_ratio_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Ratio:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_time_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_time_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Duration:"), l, NULL);
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), t);
|
||||
hig_workarea_add_section_title (t, &row, _("Current Session"));
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_up_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_up_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Uploaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_down_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_down_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Downloaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_ratio_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_ratio_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Ratio:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->one_time_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->one_time_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Duration:"), l, NULL);
|
||||
hig_workarea_add_section_divider (t, &row);
|
||||
hig_workarea_add_section_title (t, &row, _("Total"));
|
||||
l = gtk_label_new (_("Started %'d time"));
|
||||
ui->all_sessions_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_sessions_lb, TRUE);
|
||||
hig_workarea_add_label_w (t, row++, l);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_up_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_up_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Uploaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_down_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_down_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Downloaded:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_ratio_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_ratio_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Ratio:"), l, NULL);
|
||||
l = gtk_label_new (NULL);
|
||||
ui->all_time_lb = GTK_LABEL (l);
|
||||
gtk_label_set_single_line_mode (ui->all_time_lb, TRUE);
|
||||
hig_workarea_add_row (t, &row, _("Duration:"), l, NULL);
|
||||
gtr_dialog_set_content (GTK_DIALOG (d), t);
|
||||
|
||||
updateStats (ui);
|
||||
g_object_set_data_full (G_OBJECT (d), "data", ui, g_free);
|
||||
g_signal_connect (d, "response", G_CALLBACK (dialogResponse), ui);
|
||||
i = gdk_threads_add_timeout_seconds (SECONDARY_WINDOW_REFRESH_INTERVAL_SECONDS, updateStats, ui);
|
||||
g_object_weak_ref (G_OBJECT (d), dialogDestroyed, GUINT_TO_POINTER (i));
|
||||
return d;
|
||||
updateStats (ui);
|
||||
g_object_set_data_full (G_OBJECT (d), "data", ui, g_free);
|
||||
g_signal_connect (d, "response", G_CALLBACK (dialogResponse), ui);
|
||||
i = gdk_threads_add_timeout_seconds (SECONDARY_WINDOW_REFRESH_INTERVAL_SECONDS, updateStats, ui);
|
||||
g_object_weak_ref (G_OBJECT (d), dialogDestroyed, GUINT_TO_POINTER (i));
|
||||
return d;
|
||||
}
|
||||
|
|
168
gtk/tr-icon.c
168
gtk/tr-icon.c
|
@ -24,9 +24,12 @@
|
|||
static GQuark
|
||||
get_core_quark (void)
|
||||
{
|
||||
static GQuark quark = 0;
|
||||
if (!quark) quark = g_quark_from_static_string ("tr-core");
|
||||
return quark;
|
||||
static GQuark quark = 0;
|
||||
|
||||
if (!quark)
|
||||
quark = g_quark_from_static_string ("tr-core");
|
||||
|
||||
return quark;
|
||||
}
|
||||
|
||||
#define ICON_NAME "transmission"
|
||||
|
@ -40,118 +43,121 @@ gtr_icon_refresh (gpointer vindicator UNUSED)
|
|||
static void
|
||||
activated (GtkStatusIcon * self UNUSED, gpointer user_data UNUSED)
|
||||
{
|
||||
gtr_action_activate ("toggle-main-window");
|
||||
gtr_action_activate ("toggle-main-window");
|
||||
}
|
||||
|
||||
static void
|
||||
popup (GtkStatusIcon * self,
|
||||
guint button,
|
||||
guint when,
|
||||
gpointer data UNUSED)
|
||||
popup (GtkStatusIcon * self,
|
||||
guint button,
|
||||
guint when,
|
||||
gpointer data UNUSED)
|
||||
{
|
||||
GtkWidget * w = gtr_action_get_widget ("/icon-popup");
|
||||
GtkWidget * w = gtr_action_get_widget ("/icon-popup");
|
||||
|
||||
gtk_menu_popup (GTK_MENU (w), NULL, NULL,
|
||||
gtk_status_icon_position_menu,
|
||||
self, button, when);
|
||||
gtk_menu_popup (GTK_MENU (w), NULL, NULL,
|
||||
gtk_status_icon_position_menu,
|
||||
self, button, when);
|
||||
}
|
||||
|
||||
void
|
||||
gtr_icon_refresh (gpointer vicon)
|
||||
{
|
||||
double KBps;
|
||||
double limit;
|
||||
char up[64];
|
||||
char upLimit[64];
|
||||
char down[64];
|
||||
char downLimit[64];
|
||||
char tip[1024];
|
||||
const char * idle = _("Idle");
|
||||
GtkStatusIcon * icon = GTK_STATUS_ICON (vicon);
|
||||
tr_session * session = gtr_core_session (g_object_get_qdata (G_OBJECT (icon), get_core_quark ()));
|
||||
double KBps;
|
||||
double limit;
|
||||
char up[64];
|
||||
char upLimit[64];
|
||||
char down[64];
|
||||
char downLimit[64];
|
||||
char tip[1024];
|
||||
const char * idle = _("Idle");
|
||||
GtkStatusIcon * icon = GTK_STATUS_ICON (vicon);
|
||||
tr_session * session = gtr_core_session (g_object_get_qdata (G_OBJECT (icon), get_core_quark ()));
|
||||
|
||||
/* up */
|
||||
KBps = tr_sessionGetRawSpeed_KBps (session, TR_UP);
|
||||
if (KBps < 0.001)
|
||||
g_strlcpy (up, idle, sizeof (up));
|
||||
else
|
||||
tr_formatter_speed_KBps (up, KBps, sizeof (up));
|
||||
/* up */
|
||||
KBps = tr_sessionGetRawSpeed_KBps (session, TR_UP);
|
||||
if (KBps < 0.001)
|
||||
g_strlcpy (up, idle, sizeof (up));
|
||||
else
|
||||
tr_formatter_speed_KBps (up, KBps, sizeof (up));
|
||||
|
||||
/* up limit */
|
||||
if (!tr_sessionGetActiveSpeedLimit_KBps (session, TR_UP, &limit))
|
||||
*upLimit = '\0';
|
||||
else {
|
||||
char buf[64];
|
||||
tr_formatter_speed_KBps (buf, limit, sizeof (buf));
|
||||
g_snprintf (upLimit, sizeof (upLimit), _(" (Limit: %s)"), buf);
|
||||
/* up limit */
|
||||
*upLimit = '\0';
|
||||
if (tr_sessionGetActiveSpeedLimit_KBps (session, TR_UP, &limit))
|
||||
{
|
||||
char buf[64];
|
||||
tr_formatter_speed_KBps (buf, limit, sizeof (buf));
|
||||
g_snprintf (upLimit, sizeof (upLimit), _(" (Limit: %s)"), buf);
|
||||
}
|
||||
|
||||
/* down */
|
||||
KBps = tr_sessionGetRawSpeed_KBps (session, TR_DOWN);
|
||||
if (KBps < 0.001)
|
||||
g_strlcpy (down, idle, sizeof (down));
|
||||
else
|
||||
tr_formatter_speed_KBps (down, KBps, sizeof (down));
|
||||
/* down */
|
||||
KBps = tr_sessionGetRawSpeed_KBps (session, TR_DOWN);
|
||||
if (KBps < 0.001)
|
||||
g_strlcpy (down, idle, sizeof (down));
|
||||
else
|
||||
tr_formatter_speed_KBps (down, KBps, sizeof (down));
|
||||
|
||||
/* down limit */
|
||||
if (!tr_sessionGetActiveSpeedLimit_KBps (session, TR_DOWN, &limit))
|
||||
*downLimit = '\0';
|
||||
else {
|
||||
char buf[64];
|
||||
tr_formatter_speed_KBps (buf, limit, sizeof (buf));
|
||||
g_snprintf (downLimit, sizeof (downLimit), _(" (Limit: %s)"), buf);
|
||||
/* down limit */
|
||||
*downLimit = '\0';
|
||||
if (tr_sessionGetActiveSpeedLimit_KBps (session, TR_DOWN, &limit))
|
||||
{
|
||||
char buf[64];
|
||||
tr_formatter_speed_KBps (buf, limit, sizeof (buf));
|
||||
g_snprintf (downLimit, sizeof (downLimit), _(" (Limit: %s)"), buf);
|
||||
}
|
||||
|
||||
/* %1$s: current upload speed
|
||||
* %2$s: current upload limit, if any
|
||||
* %3$s: current download speed
|
||||
* %4$s: current download limit, if any */
|
||||
g_snprintf (tip, sizeof (tip), _("Transmission\nUp: %1$s %2$s\nDown: %3$s %4$s"), up, upLimit, down, downLimit);
|
||||
/* %1$s: current upload speed
|
||||
* %2$s: current upload limit, if any
|
||||
* %3$s: current download speed
|
||||
* %4$s: current download limit, if any */
|
||||
g_snprintf (tip, sizeof (tip), _("Transmission\nUp: %1$s %2$s\nDown: %3$s %4$s"), up, upLimit, down, downLimit);
|
||||
|
||||
gtk_status_icon_set_tooltip_text (GTK_STATUS_ICON (icon), tip);
|
||||
gtk_status_icon_set_tooltip_text (GTK_STATUS_ICON (icon), tip);
|
||||
}
|
||||
#endif
|
||||
|
||||
static const char *
|
||||
getIconName (void)
|
||||
{
|
||||
const char * icon_name;
|
||||
const char * icon_name;
|
||||
|
||||
GtkIconTheme * theme = gtk_icon_theme_get_default ();
|
||||
GtkIconTheme * theme = gtk_icon_theme_get_default ();
|
||||
|
||||
/* if the tray's icon is a 48x48 file, use it;
|
||||
* otherwise, use the fallback builtin icon */
|
||||
if (!gtk_icon_theme_has_icon (theme, TRAY_ICON))
|
||||
icon_name = ICON_NAME;
|
||||
else {
|
||||
GtkIconInfo * icon_info = gtk_icon_theme_lookup_icon (theme, TRAY_ICON, 48, GTK_ICON_LOOKUP_USE_BUILTIN);
|
||||
const gboolean icon_is_builtin = gtk_icon_info_get_filename (icon_info) == NULL;
|
||||
gtk_icon_info_free (icon_info);
|
||||
icon_name = icon_is_builtin ? ICON_NAME : TRAY_ICON;
|
||||
/* if the tray's icon is a 48x48 file, use it;
|
||||
* otherwise, use the fallback builtin icon */
|
||||
if (!gtk_icon_theme_has_icon (theme, TRAY_ICON))
|
||||
{
|
||||
icon_name = ICON_NAME;
|
||||
}
|
||||
else
|
||||
{
|
||||
GtkIconInfo * icon_info = gtk_icon_theme_lookup_icon (theme, TRAY_ICON, 48, GTK_ICON_LOOKUP_USE_BUILTIN);
|
||||
const gboolean icon_is_builtin = gtk_icon_info_get_filename (icon_info) == NULL;
|
||||
gtk_icon_info_free (icon_info);
|
||||
icon_name = icon_is_builtin ? ICON_NAME : TRAY_ICON;
|
||||
}
|
||||
|
||||
return icon_name;
|
||||
return icon_name;
|
||||
}
|
||||
|
||||
gpointer
|
||||
gtr_icon_new (TrCore * core)
|
||||
{
|
||||
#ifdef HAVE_LIBAPPINDICATOR
|
||||
GtkWidget * w;
|
||||
const char * icon_name = getIconName ();
|
||||
AppIndicator * indicator = app_indicator_new (ICON_NAME, icon_name, APP_INDICATOR_CATEGORY_SYSTEM_SERVICES);
|
||||
app_indicator_set_status (indicator, APP_INDICATOR_STATUS_ACTIVE);
|
||||
w = gtr_action_get_widget ("/icon-popup");
|
||||
app_indicator_set_menu (indicator, GTK_MENU (w));
|
||||
app_indicator_set_title (indicator, g_get_application_name ());
|
||||
g_object_set_qdata (G_OBJECT (indicator), get_core_quark (), core);
|
||||
return indicator;
|
||||
GtkWidget * w;
|
||||
const char * icon_name = getIconName ();
|
||||
AppIndicator * indicator = app_indicator_new (ICON_NAME, icon_name, APP_INDICATOR_CATEGORY_SYSTEM_SERVICES);
|
||||
app_indicator_set_status (indicator, APP_INDICATOR_STATUS_ACTIVE);
|
||||
w = gtr_action_get_widget ("/icon-popup");
|
||||
app_indicator_set_menu (indicator, GTK_MENU (w));
|
||||
app_indicator_set_title (indicator, g_get_application_name ());
|
||||
g_object_set_qdata (G_OBJECT (indicator), get_core_quark (), core);
|
||||
return indicator;
|
||||
#else
|
||||
const char * icon_name = getIconName ();
|
||||
GtkStatusIcon * icon = gtk_status_icon_new_from_icon_name (icon_name);
|
||||
g_signal_connect (icon, "activate", G_CALLBACK (activated), NULL);
|
||||
g_signal_connect (icon, "popup-menu", G_CALLBACK (popup), NULL);
|
||||
g_object_set_qdata (G_OBJECT (icon), get_core_quark (), core);
|
||||
return icon;
|
||||
const char * icon_name = getIconName ();
|
||||
GtkStatusIcon * icon = gtk_status_icon_new_from_icon_name (icon_name);
|
||||
g_signal_connect (icon, "activate", G_CALLBACK (activated), NULL);
|
||||
g_signal_connect (icon, "popup-menu", G_CALLBACK (popup), NULL);
|
||||
g_object_set_qdata (G_OBJECT (icon), get_core_quark (), core);
|
||||
return icon;
|
||||
#endif
|
||||
}
|
||||
|
|
533
gtk/util.c
533
gtk/util.c
|
@ -59,184 +59,191 @@ const char * speed_T_str = N_("TB/s");
|
|||
const char*
|
||||
gtr_get_unicode_string (int i)
|
||||
{
|
||||
switch (i) {
|
||||
case GTR_UNICODE_UP: return "\xE2\x86\x91";
|
||||
case GTR_UNICODE_DOWN: return "\xE2\x86\x93";
|
||||
case GTR_UNICODE_INF: return "\xE2\x88\x9E";
|
||||
case GTR_UNICODE_BULLET: return "\xE2\x88\x99";
|
||||
default: return "err";
|
||||
switch (i)
|
||||
{
|
||||
case GTR_UNICODE_UP: return "\xE2\x86\x91";
|
||||
case GTR_UNICODE_DOWN: return "\xE2\x86\x93";
|
||||
case GTR_UNICODE_INF: return "\xE2\x88\x9E";
|
||||
case GTR_UNICODE_BULLET: return "\xE2\x88\x99";
|
||||
default: return "err";
|
||||
}
|
||||
}
|
||||
|
||||
char*
|
||||
tr_strlratio (char * buf, double ratio, size_t buflen)
|
||||
{
|
||||
return tr_strratio (buf, buflen, ratio, gtr_get_unicode_string (GTR_UNICODE_INF));
|
||||
return tr_strratio (buf, buflen, ratio, gtr_get_unicode_string (GTR_UNICODE_INF));
|
||||
}
|
||||
|
||||
char*
|
||||
tr_strlpercent (char * buf, double x, size_t buflen)
|
||||
{
|
||||
return tr_strpercent (buf, x, buflen);
|
||||
return tr_strpercent (buf, x, buflen);
|
||||
}
|
||||
|
||||
char*
|
||||
tr_strlsize (char * buf, guint64 bytes, size_t buflen)
|
||||
{
|
||||
if (!bytes)
|
||||
g_strlcpy (buf, Q_("None"), buflen);
|
||||
else
|
||||
tr_formatter_size_B (buf, bytes, buflen);
|
||||
if (!bytes)
|
||||
g_strlcpy (buf, Q_("None"), buflen);
|
||||
else
|
||||
tr_formatter_size_B (buf, bytes, buflen);
|
||||
|
||||
return buf;
|
||||
return buf;
|
||||
}
|
||||
|
||||
char*
|
||||
tr_strltime (char * buf, int seconds, size_t buflen)
|
||||
{
|
||||
int days, hours, minutes;
|
||||
char d[128], h[128], m[128], s[128];
|
||||
int days, hours, minutes;
|
||||
char d[128], h[128], m[128], s[128];
|
||||
|
||||
if (seconds < 0)
|
||||
seconds = 0;
|
||||
if (seconds < 0)
|
||||
seconds = 0;
|
||||
|
||||
days = seconds / 86400;
|
||||
hours = (seconds % 86400) / 3600;
|
||||
minutes = (seconds % 3600) / 60;
|
||||
seconds = (seconds % 3600) % 60;
|
||||
days = seconds / 86400;
|
||||
hours = (seconds % 86400) / 3600;
|
||||
minutes = (seconds % 3600) / 60;
|
||||
seconds = (seconds % 3600) % 60;
|
||||
|
||||
g_snprintf (d, sizeof (d), ngettext ("%'d day", "%'d days", days), days);
|
||||
g_snprintf (h, sizeof (h), ngettext ("%'d hour", "%'d hours", hours), hours);
|
||||
g_snprintf (m, sizeof (m), ngettext ("%'d minute", "%'d minutes", minutes), minutes);
|
||||
g_snprintf (s, sizeof (s), ngettext ("%'d second", "%'d seconds", seconds), seconds);
|
||||
g_snprintf (d, sizeof (d), ngettext ("%'d day", "%'d days", days), days);
|
||||
g_snprintf (h, sizeof (h), ngettext ("%'d hour", "%'d hours", hours), hours);
|
||||
g_snprintf (m, sizeof (m), ngettext ("%'d minute", "%'d minutes", minutes), minutes);
|
||||
g_snprintf (s, sizeof (s), ngettext ("%'d second", "%'d seconds", seconds), seconds);
|
||||
|
||||
if (days)
|
||||
if (days)
|
||||
{
|
||||
if (days >= 4 || !hours)
|
||||
g_strlcpy (buf, d, buflen);
|
||||
else
|
||||
g_snprintf (buf, buflen, "%s, %s", d, h);
|
||||
if (days >= 4 || !hours)
|
||||
g_strlcpy (buf, d, buflen);
|
||||
else
|
||||
g_snprintf (buf, buflen, "%s, %s", d, h);
|
||||
}
|
||||
else if (hours)
|
||||
else if (hours)
|
||||
{
|
||||
if (hours >= 4 || !minutes)
|
||||
g_strlcpy (buf, h, buflen);
|
||||
else
|
||||
g_snprintf (buf, buflen, "%s, %s", h, m);
|
||||
if (hours >= 4 || !minutes)
|
||||
g_strlcpy (buf, h, buflen);
|
||||
else
|
||||
g_snprintf (buf, buflen, "%s, %s", h, m);
|
||||
}
|
||||
else if (minutes)
|
||||
else if (minutes)
|
||||
{
|
||||
if (minutes >= 4 || !seconds)
|
||||
g_strlcpy (buf, m, buflen);
|
||||
else
|
||||
g_snprintf (buf, buflen, "%s, %s", m, s);
|
||||
if (minutes >= 4 || !seconds)
|
||||
g_strlcpy (buf, m, buflen);
|
||||
else
|
||||
g_snprintf (buf, buflen, "%s, %s", m, s);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
g_strlcpy (buf, s, buflen);
|
||||
g_strlcpy (buf, s, buflen);
|
||||
}
|
||||
|
||||
return buf;
|
||||
return buf;
|
||||
}
|
||||
|
||||
/* pattern-matching text; ie, legaltorrents.com */
|
||||
void
|
||||
gtr_get_host_from_url (char * buf, size_t buflen, const char * url)
|
||||
{
|
||||
char host[1024];
|
||||
const char * pch;
|
||||
char host[1024];
|
||||
const char * pch;
|
||||
|
||||
if ((pch = strstr (url, "://"))) {
|
||||
const size_t hostlen = strcspn (pch+3, ":/");
|
||||
const size_t copylen = MIN (hostlen, sizeof (host)-1);
|
||||
memcpy (host, pch+3, copylen);
|
||||
host[copylen] = '\0';
|
||||
} else {
|
||||
*host = '\0';
|
||||
if ((pch = strstr (url, "://")))
|
||||
{
|
||||
const size_t hostlen = strcspn (pch+3, ":/");
|
||||
const size_t copylen = MIN (hostlen, sizeof (host)-1);
|
||||
memcpy (host, pch+3, copylen);
|
||||
host[copylen] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
*host = '\0';
|
||||
}
|
||||
|
||||
if (tr_addressIsIP (host))
|
||||
g_strlcpy (buf, url, buflen);
|
||||
else {
|
||||
const char * first_dot = strchr (host, '.');
|
||||
const char * last_dot = strrchr (host, '.');
|
||||
if ((first_dot) && (last_dot) && (first_dot != last_dot))
|
||||
g_strlcpy (buf, first_dot + 1, buflen);
|
||||
else
|
||||
g_strlcpy (buf, host, buflen);
|
||||
if (tr_addressIsIP (host))
|
||||
{
|
||||
g_strlcpy (buf, url, buflen);
|
||||
}
|
||||
else
|
||||
{
|
||||
const char * first_dot = strchr (host, '.');
|
||||
const char * last_dot = strrchr (host, '.');
|
||||
if ((first_dot) && (last_dot) && (first_dot != last_dot))
|
||||
g_strlcpy (buf, first_dot + 1, buflen);
|
||||
else
|
||||
g_strlcpy (buf, host, buflen);
|
||||
}
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gtr_is_supported_url (const char * str)
|
||||
{
|
||||
return ((str != NULL) &&
|
||||
return ((str != NULL) &&
|
||||
(g_str_has_prefix (str, "ftp://") ||
|
||||
g_str_has_prefix (str, "http://") ||
|
||||
g_str_has_prefix (str, "https://")));
|
||||
g_str_has_prefix (str, "http://") ||
|
||||
g_str_has_prefix (str, "https://")));
|
||||
}
|
||||
|
||||
gboolean
|
||||
gtr_is_magnet_link (const char * str)
|
||||
{
|
||||
return (str != NULL) &&
|
||||
(g_str_has_prefix (str, "magnet:?"));
|
||||
return (str != NULL) && (g_str_has_prefix (str, "magnet:?"));
|
||||
}
|
||||
|
||||
gboolean
|
||||
gtr_is_hex_hashcode (const char * str)
|
||||
{
|
||||
int i;
|
||||
int i;
|
||||
|
||||
if (!str || (strlen (str) != 40))
|
||||
return FALSE;
|
||||
if (!str || (strlen (str) != 40))
|
||||
return FALSE;
|
||||
|
||||
for (i=0; i<40; ++i)
|
||||
if (!isxdigit (str[i]))
|
||||
return FALSE;
|
||||
for (i=0; i<40; ++i)
|
||||
if (!isxdigit (str[i]))
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static GtkWindow *
|
||||
getWindow (GtkWidget * w)
|
||||
{
|
||||
if (w == NULL)
|
||||
return NULL;
|
||||
if (w == NULL)
|
||||
return NULL;
|
||||
|
||||
if (GTK_IS_WINDOW (w))
|
||||
return GTK_WINDOW (w);
|
||||
if (GTK_IS_WINDOW (w))
|
||||
return GTK_WINDOW (w);
|
||||
|
||||
return GTK_WINDOW (gtk_widget_get_ancestor (w, GTK_TYPE_WINDOW));
|
||||
return GTK_WINDOW (gtk_widget_get_ancestor (w, GTK_TYPE_WINDOW));
|
||||
}
|
||||
|
||||
void
|
||||
gtr_add_torrent_error_dialog (GtkWidget * child, int err, const char * file)
|
||||
{
|
||||
char * secondary;
|
||||
const char * fmt;
|
||||
GtkWidget * w;
|
||||
GtkWindow * win = getWindow (child);
|
||||
char * secondary;
|
||||
const char * fmt;
|
||||
GtkWidget * w;
|
||||
GtkWindow * win = getWindow (child);
|
||||
|
||||
switch (err)
|
||||
switch (err)
|
||||
{
|
||||
case TR_PARSE_ERR: fmt = _("The torrent file \"%s\" contains invalid data."); break;
|
||||
case TR_PARSE_DUPLICATE: fmt = _("The torrent file \"%s\" is already in use."); break;
|
||||
default: fmt = _("The torrent file \"%s\" encountered an unknown error."); break;
|
||||
case TR_PARSE_ERR: fmt = _("The torrent file \"%s\" contains invalid data."); break;
|
||||
case TR_PARSE_DUPLICATE: fmt = _("The torrent file \"%s\" is already in use."); break;
|
||||
default: fmt = _("The torrent file \"%s\" encountered an unknown error."); break;
|
||||
}
|
||||
secondary = g_strdup_printf (fmt, file);
|
||||
|
||||
w = gtk_message_dialog_new (win,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", _("Error opening torrent"));
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w),
|
||||
"%s", secondary);
|
||||
g_signal_connect_swapped (w, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), w);
|
||||
gtk_widget_show_all (w);
|
||||
g_free (secondary);
|
||||
secondary = g_strdup_printf (fmt, file);
|
||||
|
||||
w = gtk_message_dialog_new (win,
|
||||
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", _("Error opening torrent"));
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w),
|
||||
"%s", secondary);
|
||||
g_signal_connect_swapped (w, "response",
|
||||
G_CALLBACK (gtk_widget_destroy), w);
|
||||
gtk_widget_show_all (w);
|
||||
g_free (secondary);
|
||||
}
|
||||
|
||||
typedef void (PopupFunc)(GtkWidget*, GdkEventButton*);
|
||||
|
@ -249,32 +256,33 @@ on_tree_view_button_pressed (GtkWidget * view,
|
|||
GdkEventButton * event,
|
||||
gpointer func)
|
||||
{
|
||||
GtkTreeView * tv = GTK_TREE_VIEW (view);
|
||||
GtkTreeView * tv = GTK_TREE_VIEW (view);
|
||||
|
||||
if (event->type == GDK_BUTTON_PRESS && event->button == 3)
|
||||
if (event->type == GDK_BUTTON_PRESS && event->button == 3)
|
||||
{
|
||||
GtkTreeSelection * selection = gtk_tree_view_get_selection (tv);
|
||||
GtkTreePath * path;
|
||||
if (gtk_tree_view_get_path_at_pos (tv,
|
||||
(gint) event->x,
|
||||
(gint) event->y,
|
||||
&path, NULL, NULL, NULL))
|
||||
GtkTreePath * path;
|
||||
GtkTreeSelection * selection = gtk_tree_view_get_selection (tv);
|
||||
|
||||
if (gtk_tree_view_get_path_at_pos (tv,
|
||||
(gint) event->x,
|
||||
(gint) event->y,
|
||||
&path, NULL, NULL, NULL))
|
||||
{
|
||||
if (!gtk_tree_selection_path_is_selected (selection, path))
|
||||
if (!gtk_tree_selection_path_is_selected (selection, path))
|
||||
{
|
||||
gtk_tree_selection_unselect_all (selection);
|
||||
gtk_tree_selection_select_path (selection, path);
|
||||
gtk_tree_selection_unselect_all (selection);
|
||||
gtk_tree_selection_select_path (selection, path);
|
||||
}
|
||||
gtk_tree_path_free (path);
|
||||
gtk_tree_path_free (path);
|
||||
}
|
||||
|
||||
if (func != NULL)
|
||||
((PopupFunc*)func)(view, event);
|
||||
if (func != NULL)
|
||||
((PopupFunc*)func)(view, event);
|
||||
|
||||
return TRUE;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* if the user clicked in an empty area of the list,
|
||||
|
@ -284,18 +292,18 @@ on_tree_view_button_released (GtkWidget * view,
|
|||
GdkEventButton * event,
|
||||
gpointer unused UNUSED)
|
||||
{
|
||||
GtkTreeView * tv = GTK_TREE_VIEW (view);
|
||||
GtkTreeView * tv = GTK_TREE_VIEW (view);
|
||||
|
||||
if (!gtk_tree_view_get_path_at_pos (tv,
|
||||
(gint) event->x,
|
||||
(gint) event->y,
|
||||
NULL, NULL, NULL, NULL))
|
||||
if (!gtk_tree_view_get_path_at_pos (tv,
|
||||
(gint) event->x,
|
||||
(gint) event->y,
|
||||
NULL, NULL, NULL, NULL))
|
||||
{
|
||||
GtkTreeSelection * selection = gtk_tree_view_get_selection (tv);
|
||||
gtk_tree_selection_unselect_all (selection);
|
||||
GtkTreeSelection * selection = gtk_tree_view_get_selection (tv);
|
||||
gtk_tree_selection_unselect_all (selection);
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -337,60 +345,60 @@ gtr_file_trash_or_remove (const char * filename)
|
|||
const char*
|
||||
gtr_get_help_uri (void)
|
||||
{
|
||||
static char * uri = NULL;
|
||||
static char * uri = NULL;
|
||||
|
||||
if (!uri)
|
||||
if (!uri)
|
||||
{
|
||||
int major, minor;
|
||||
const char * fmt = "http://www.transmissionbt.com/help/gtk/%d.%dx";
|
||||
sscanf (SHORT_VERSION_STRING, "%d.%d", &major, &minor);
|
||||
uri = g_strdup_printf (fmt, major, minor / 10);
|
||||
int major, minor;
|
||||
const char * fmt = "http://www.transmissionbt.com/help/gtk/%d.%dx";
|
||||
sscanf (SHORT_VERSION_STRING, "%d.%d", &major, &minor);
|
||||
uri = g_strdup_printf (fmt, major, minor / 10);
|
||||
}
|
||||
|
||||
return uri;
|
||||
return uri;
|
||||
}
|
||||
|
||||
void
|
||||
gtr_open_file (const char * path)
|
||||
{
|
||||
char * uri;
|
||||
char * uri;
|
||||
|
||||
GFile * file = g_file_new_for_path (path);
|
||||
g_object_unref (G_OBJECT (file));
|
||||
|
||||
if (g_path_is_absolute (path))
|
||||
uri = g_strdup_printf ("file://%s", path);
|
||||
else {
|
||||
char * cwd = g_get_current_dir ();
|
||||
uri = g_strdup_printf ("file://%s/%s", cwd, path);
|
||||
g_free (cwd);
|
||||
if (g_path_is_absolute (path))
|
||||
{
|
||||
uri = g_strdup_printf ("file://%s", path);
|
||||
}
|
||||
else
|
||||
{
|
||||
char * cwd = g_get_current_dir ();
|
||||
uri = g_strdup_printf ("file://%s/%s", cwd, path);
|
||||
g_free (cwd);
|
||||
}
|
||||
|
||||
gtr_open_uri (uri);
|
||||
g_free (uri);
|
||||
gtr_open_uri (uri);
|
||||
g_free (uri);
|
||||
}
|
||||
|
||||
void
|
||||
gtr_open_uri (const char * uri)
|
||||
{
|
||||
if (uri)
|
||||
if (uri)
|
||||
{
|
||||
gboolean opened = FALSE;
|
||||
gboolean opened = FALSE;
|
||||
|
||||
if (!opened)
|
||||
opened = gtk_show_uri (NULL, uri, GDK_CURRENT_TIME, NULL);
|
||||
if (!opened)
|
||||
opened = gtk_show_uri (NULL, uri, GDK_CURRENT_TIME, NULL);
|
||||
|
||||
if (!opened)
|
||||
opened = g_app_info_launch_default_for_uri (uri, NULL, NULL);
|
||||
if (!opened)
|
||||
opened = g_app_info_launch_default_for_uri (uri, NULL, NULL);
|
||||
|
||||
if (!opened) {
|
||||
char * argv[] = { (char*)"xdg-open", (char*)uri, NULL };
|
||||
opened = g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH,
|
||||
NULL, NULL, NULL, NULL);
|
||||
if (!opened)
|
||||
{
|
||||
char * argv[] = { (char*)"xdg-open", (char*)uri, NULL };
|
||||
opened = g_spawn_async (NULL, argv, NULL, G_SPAWN_SEARCH_PATH, NULL, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
if (!opened)
|
||||
g_message ("Unable to open \"%s\"", uri);
|
||||
if (!opened)
|
||||
g_message ("Unable to open \"%s\"", uri);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -401,26 +409,29 @@ gtr_open_uri (const char * uri)
|
|||
void
|
||||
gtr_combo_box_set_active_enum (GtkComboBox * combo_box, int value)
|
||||
{
|
||||
int i;
|
||||
int currentValue;
|
||||
const int column = 0;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel * model = gtk_combo_box_get_model (combo_box);
|
||||
int i;
|
||||
int currentValue;
|
||||
const int column = 0;
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel * model = gtk_combo_box_get_model (combo_box);
|
||||
|
||||
/* do the value and current value match? */
|
||||
if (gtk_combo_box_get_active_iter (combo_box, &iter)) {
|
||||
gtk_tree_model_get (model, &iter, column, ¤tValue, -1);
|
||||
if (currentValue == value)
|
||||
return;
|
||||
/* do the value and current value match? */
|
||||
if (gtk_combo_box_get_active_iter (combo_box, &iter))
|
||||
{
|
||||
gtk_tree_model_get (model, &iter, column, ¤tValue, -1);
|
||||
if (currentValue == value)
|
||||
return;
|
||||
}
|
||||
|
||||
/* find the one to select */
|
||||
i = 0;
|
||||
while ((gtk_tree_model_iter_nth_child (model, &iter, NULL, i++))) {
|
||||
gtk_tree_model_get (model, &iter, column, ¤tValue, -1);
|
||||
if (currentValue == value) {
|
||||
gtk_combo_box_set_active_iter (combo_box, &iter);
|
||||
return;
|
||||
/* find the one to select */
|
||||
i = 0;
|
||||
while ((gtk_tree_model_iter_nth_child (model, &iter, NULL, i++)))
|
||||
{
|
||||
gtk_tree_model_get (model, &iter, column, ¤tValue, -1);
|
||||
if (currentValue == value)
|
||||
{
|
||||
gtk_combo_box_set_active_iter (combo_box, &iter);
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -429,53 +440,53 @@ gtr_combo_box_set_active_enum (GtkComboBox * combo_box, int value)
|
|||
GtkWidget *
|
||||
gtr_combo_box_new_enum (const char * text_1, ...)
|
||||
{
|
||||
GtkWidget * w;
|
||||
GtkCellRenderer * r;
|
||||
GtkListStore * store;
|
||||
va_list vl;
|
||||
const char * text;
|
||||
va_start (vl, text_1);
|
||||
GtkWidget * w;
|
||||
GtkCellRenderer * r;
|
||||
GtkListStore * store;
|
||||
va_list vl;
|
||||
const char * text;
|
||||
va_start (vl, text_1);
|
||||
|
||||
store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING);
|
||||
store = gtk_list_store_new (2, G_TYPE_INT, G_TYPE_STRING);
|
||||
|
||||
text = text_1;
|
||||
if (text != NULL) do
|
||||
text = text_1;
|
||||
if (text != NULL) do
|
||||
{
|
||||
const int val = va_arg (vl, int);
|
||||
gtk_list_store_insert_with_values (store, NULL, INT_MAX, 0, val, 1, text, -1);
|
||||
text = va_arg (vl, const char *);
|
||||
const int val = va_arg (vl, int);
|
||||
gtk_list_store_insert_with_values (store, NULL, INT_MAX, 0, val, 1, text, -1);
|
||||
text = va_arg (vl, const char *);
|
||||
}
|
||||
while (text != NULL);
|
||||
while (text != NULL);
|
||||
|
||||
w = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
|
||||
r = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (w), r, TRUE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (w), r, "text", 1, NULL);
|
||||
w = gtk_combo_box_new_with_model (GTK_TREE_MODEL (store));
|
||||
r = gtk_cell_renderer_text_new ();
|
||||
gtk_cell_layout_pack_start (GTK_CELL_LAYOUT (w), r, TRUE);
|
||||
gtk_cell_layout_set_attributes (GTK_CELL_LAYOUT (w), r, "text", 1, NULL);
|
||||
|
||||
/* cleanup */
|
||||
g_object_unref (store);
|
||||
return w;
|
||||
/* cleanup */
|
||||
g_object_unref (store);
|
||||
return w;
|
||||
}
|
||||
|
||||
int
|
||||
gtr_combo_box_get_active_enum (GtkComboBox * combo_box)
|
||||
{
|
||||
int value = 0;
|
||||
GtkTreeIter iter;
|
||||
int value = 0;
|
||||
GtkTreeIter iter;
|
||||
|
||||
if (gtk_combo_box_get_active_iter (combo_box, &iter))
|
||||
gtk_tree_model_get (gtk_combo_box_get_model (combo_box), &iter, 0, &value, -1);
|
||||
if (gtk_combo_box_get_active_iter (combo_box, &iter))
|
||||
gtk_tree_model_get (gtk_combo_box_get_model (combo_box), &iter, 0, &value, -1);
|
||||
|
||||
return value;
|
||||
return value;
|
||||
}
|
||||
|
||||
GtkWidget *
|
||||
gtr_priority_combo_new (void)
|
||||
{
|
||||
return gtr_combo_box_new_enum (_("High"), TR_PRI_HIGH,
|
||||
_("Normal"), TR_PRI_NORMAL,
|
||||
_("Low"), TR_PRI_LOW,
|
||||
NULL);
|
||||
return gtr_combo_box_new_enum (_("High"), TR_PRI_HIGH,
|
||||
_("Normal"), TR_PRI_NORMAL,
|
||||
_("Low"), TR_PRI_LOW,
|
||||
NULL);
|
||||
}
|
||||
|
||||
/***
|
||||
|
@ -487,46 +498,46 @@ gtr_priority_combo_new (void)
|
|||
void
|
||||
gtr_widget_set_visible (GtkWidget * w, gboolean b)
|
||||
{
|
||||
/* toggle the transient children, too */
|
||||
if (GTK_IS_WINDOW (w))
|
||||
/* toggle the transient children, too */
|
||||
if (GTK_IS_WINDOW (w))
|
||||
{
|
||||
GList * l;
|
||||
GList * windows = gtk_window_list_toplevels ();
|
||||
GtkWindow * window = GTK_WINDOW (w);
|
||||
GList * l;
|
||||
GList * windows = gtk_window_list_toplevels ();
|
||||
GtkWindow * window = GTK_WINDOW (w);
|
||||
|
||||
for (l=windows; l!=NULL; l=l->next)
|
||||
for (l=windows; l!=NULL; l=l->next)
|
||||
{
|
||||
if (!GTK_IS_WINDOW (l->data))
|
||||
continue;
|
||||
if (gtk_window_get_transient_for (GTK_WINDOW (l->data)) != window)
|
||||
continue;
|
||||
if (gtk_widget_get_visible (GTK_WIDGET (l->data)) == b)
|
||||
continue;
|
||||
if (!GTK_IS_WINDOW (l->data))
|
||||
continue;
|
||||
if (gtk_window_get_transient_for (GTK_WINDOW (l->data)) != window)
|
||||
continue;
|
||||
if (gtk_widget_get_visible (GTK_WIDGET (l->data)) == b)
|
||||
continue;
|
||||
|
||||
if (b && g_object_get_data (G_OBJECT (l->data), GTR_CHILD_HIDDEN) != NULL)
|
||||
if (b && g_object_get_data (G_OBJECT (l->data), GTR_CHILD_HIDDEN) != NULL)
|
||||
{
|
||||
g_object_steal_data (G_OBJECT (l->data), GTR_CHILD_HIDDEN);
|
||||
gtr_widget_set_visible (GTK_WIDGET (l->data), TRUE);
|
||||
g_object_steal_data (G_OBJECT (l->data), GTR_CHILD_HIDDEN);
|
||||
gtr_widget_set_visible (GTK_WIDGET (l->data), TRUE);
|
||||
}
|
||||
else if (!b)
|
||||
else if (!b)
|
||||
{
|
||||
g_object_set_data (G_OBJECT (l->data), GTR_CHILD_HIDDEN, GINT_TO_POINTER (1));
|
||||
gtr_widget_set_visible (GTK_WIDGET (l->data), FALSE);
|
||||
g_object_set_data (G_OBJECT (l->data), GTR_CHILD_HIDDEN, GINT_TO_POINTER (1));
|
||||
gtr_widget_set_visible (GTK_WIDGET (l->data), FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
g_list_free (windows);
|
||||
g_list_free (windows);
|
||||
}
|
||||
|
||||
gtk_widget_set_visible (w, b);
|
||||
gtk_widget_set_visible (w, b);
|
||||
}
|
||||
|
||||
void
|
||||
gtr_dialog_set_content (GtkDialog * dialog, GtkWidget * content)
|
||||
{
|
||||
GtkWidget * vbox = gtk_dialog_get_content_area (dialog);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), content, TRUE, TRUE, 0);
|
||||
gtk_widget_show_all (content);
|
||||
GtkWidget * vbox = gtk_dialog_get_content_area (dialog);
|
||||
gtk_box_pack_start (GTK_BOX (vbox), content, TRUE, TRUE, 0);
|
||||
gtk_widget_show_all (content);
|
||||
}
|
||||
|
||||
/***
|
||||
|
@ -536,48 +547,48 @@ gtr_dialog_set_content (GtkDialog * dialog, GtkWidget * content)
|
|||
void
|
||||
gtr_http_failure_dialog (GtkWidget * parent, const char * url, long response_code)
|
||||
{
|
||||
GtkWindow * window = getWindow (parent);
|
||||
GtkWindow * window = getWindow (parent);
|
||||
|
||||
GtkWidget * w = gtk_message_dialog_new (window, 0,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
_("Error opening \"%s\""), url);
|
||||
GtkWidget * w = gtk_message_dialog_new (window, 0,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
_("Error opening \"%s\""), url);
|
||||
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w),
|
||||
_("Server returned \"%1$ld %2$s\""),
|
||||
response_code,
|
||||
tr_webGetResponseStr (response_code));
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w),
|
||||
_("Server returned \"%1$ld %2$s\""),
|
||||
response_code,
|
||||
tr_webGetResponseStr (response_code));
|
||||
|
||||
g_signal_connect_swapped (w, "response", G_CALLBACK (gtk_widget_destroy), w);
|
||||
gtk_widget_show (w);
|
||||
g_signal_connect_swapped (w, "response", G_CALLBACK (gtk_widget_destroy), w);
|
||||
gtk_widget_show (w);
|
||||
}
|
||||
|
||||
void
|
||||
gtr_unrecognized_url_dialog (GtkWidget * parent, const char * url)
|
||||
{
|
||||
const char * xt = "xt=urn:btih";
|
||||
const char * xt = "xt=urn:btih";
|
||||
|
||||
GtkWindow * window = getWindow (parent);
|
||||
GtkWindow * window = getWindow (parent);
|
||||
|
||||
GString * gstr = g_string_new (NULL);
|
||||
GString * gstr = g_string_new (NULL);
|
||||
|
||||
GtkWidget * w = gtk_message_dialog_new (window, 0,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", _("Unrecognized URL"));
|
||||
GtkWidget * w = gtk_message_dialog_new (window, 0,
|
||||
GTK_MESSAGE_ERROR,
|
||||
GTK_BUTTONS_CLOSE,
|
||||
"%s", _("Unrecognized URL"));
|
||||
|
||||
g_string_append_printf (gstr, _("Transmission doesn't know how to use \"%s\""), url);
|
||||
g_string_append_printf (gstr, _("Transmission doesn't know how to use \"%s\""), url);
|
||||
|
||||
if (gtr_is_magnet_link (url) && (strstr (url, xt) == NULL))
|
||||
if (gtr_is_magnet_link (url) && (strstr (url, xt) == NULL))
|
||||
{
|
||||
g_string_append_printf (gstr, "\n \n");
|
||||
g_string_append_printf (gstr, _("This magnet link appears to be intended for something other than BitTorrent. BitTorrent magnet links have a section containing \"%s\"."), xt);
|
||||
g_string_append_printf (gstr, "\n \n");
|
||||
g_string_append_printf (gstr, _("This magnet link appears to be intended for something other than BitTorrent. BitTorrent magnet links have a section containing \"%s\"."), xt);
|
||||
}
|
||||
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), "%s", gstr->str);
|
||||
g_signal_connect_swapped (w, "response", G_CALLBACK (gtk_widget_destroy), w);
|
||||
gtk_widget_show (w);
|
||||
g_string_free (gstr, TRUE);
|
||||
gtk_message_dialog_format_secondary_text (GTK_MESSAGE_DIALOG (w), "%s", gstr->str);
|
||||
g_signal_connect_swapped (w, "response", G_CALLBACK (gtk_widget_destroy), w);
|
||||
gtk_widget_show (w);
|
||||
g_string_free (gstr, TRUE);
|
||||
}
|
||||
|
||||
/***
|
||||
|
@ -589,19 +600,21 @@ gtr_paste_clipboard_url_into_entry (GtkWidget * e)
|
|||
{
|
||||
size_t i;
|
||||
|
||||
char * text[] = {
|
||||
g_strstrip (gtk_clipboard_wait_for_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY))),
|
||||
g_strstrip (gtk_clipboard_wait_for_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)))
|
||||
};
|
||||
char * text[] =
|
||||
{
|
||||
g_strstrip (gtk_clipboard_wait_for_text (gtk_clipboard_get (GDK_SELECTION_PRIMARY))),
|
||||
g_strstrip (gtk_clipboard_wait_for_text (gtk_clipboard_get (GDK_SELECTION_CLIPBOARD)))
|
||||
};
|
||||
|
||||
for (i=0; i<G_N_ELEMENTS (text); ++i) {
|
||||
for (i=0; i<G_N_ELEMENTS (text); ++i)
|
||||
{
|
||||
char * s = text[i];
|
||||
if (s && (gtr_is_supported_url (s) || gtr_is_magnet_link (s)
|
||||
|| gtr_is_hex_hashcode (s))) {
|
||||
if (s && (gtr_is_supported_url (s) || gtr_is_magnet_link (s) || gtr_is_hex_hashcode (s)))
|
||||
{
|
||||
gtk_entry_set_text (GTK_ENTRY (e), s);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (i=0; i<G_N_ELEMENTS (text); ++i)
|
||||
g_free (text[i]);
|
||||
|
@ -614,8 +627,8 @@ gtr_paste_clipboard_url_into_entry (GtkWidget * e)
|
|||
void
|
||||
gtr_label_set_text (GtkLabel * lb, const char * newstr)
|
||||
{
|
||||
const char * oldstr = gtk_label_get_text (lb);
|
||||
const char * oldstr = gtk_label_get_text (lb);
|
||||
|
||||
if (tr_strcmp0 (oldstr, newstr))
|
||||
gtk_label_set_text (lb, newstr);
|
||||
if (tr_strcmp0 (oldstr, newstr))
|
||||
gtk_label_set_text (lb, newstr);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue