Implemented tabbed browsing (mostly usable already)
This commit is contained in:
parent
83dc7491b6
commit
7ec113c1eb
32
po/de.po
32
po/de.po
@ -7,12 +7,12 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Surfer 0.1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-04-11 15:12+0200\n"
|
||||
"POT-Creation-Date: 2010-04-11 19:45+0200\n"
|
||||
"PO-Revision-Date: 2010-04-01 19:40+0200\n"
|
||||
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
|
||||
"Language-Team: German\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-15\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
@ -113,8 +113,8 @@ msgstr ""
|
||||
msgid "Close window when the download is complete"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:506
|
||||
#: ../src/surfer.c:509
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:510
|
||||
#: ../src/surfer.c:513
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
@ -157,7 +157,7 @@ msgstr ""
|
||||
msgid "Code "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:508
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:512
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
@ -300,46 +300,46 @@ msgstr ""
|
||||
msgid " Location: "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:254
|
||||
#: ../src/surfer.c:256
|
||||
msgid "Could not initialize HTML renderer"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:455 ../src/surfer.c:458
|
||||
#: ../src/surfer.c:459 ../src/surfer.c:462
|
||||
msgid "Question"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:475 ../src/surfer.c:709
|
||||
#: ../src/surfer.c:479 ../src/surfer.c:713
|
||||
msgid "Save file as..."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:537
|
||||
#: ../src/surfer.c:541
|
||||
msgid "Find text"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: ../src/surfer.c:544
|
||||
#: ../src/surfer.c:548
|
||||
msgid "Text:"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:551
|
||||
#: ../src/surfer.c:555
|
||||
msgid "Case-sensitive"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:553
|
||||
#: ../src/surfer.c:557
|
||||
msgid "Wrap"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:576
|
||||
#: ../src/surfer.c:580
|
||||
msgid "Text not found"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:650
|
||||
#: ../src/surfer.c:654
|
||||
msgid "Open file..."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:833
|
||||
#: ../src/surfer.c:837
|
||||
msgid "Web surfer - Source of "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:875 ../src/surfer.c:878
|
||||
#: ../src/surfer.c:879 ../src/surfer.c:882
|
||||
msgid "Warning"
|
||||
msgstr "Achtung"
|
||||
|
32
po/es.po
32
po/es.po
@ -7,12 +7,12 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Surfer 0.1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-04-11 15:12+0200\n"
|
||||
"POT-Creation-Date: 2010-04-11 19:45+0200\n"
|
||||
"PO-Revision-Date: 2010-04-01 19:40+0200\n"
|
||||
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
|
||||
"Language-Team: Spanish\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=ISO-8859-15\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
@ -113,8 +113,8 @@ msgstr ""
|
||||
msgid "Close window when the download is complete"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:506
|
||||
#: ../src/surfer.c:509
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:510
|
||||
#: ../src/surfer.c:513
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
@ -157,7 +157,7 @@ msgstr ""
|
||||
msgid "Code "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:508
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:512
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
@ -300,46 +300,46 @@ msgstr ""
|
||||
msgid " Location: "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:254
|
||||
#: ../src/surfer.c:256
|
||||
msgid "Could not initialize HTML renderer"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:455 ../src/surfer.c:458
|
||||
#: ../src/surfer.c:459 ../src/surfer.c:462
|
||||
msgid "Question"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:475 ../src/surfer.c:709
|
||||
#: ../src/surfer.c:479 ../src/surfer.c:713
|
||||
msgid "Save file as..."
|
||||
msgstr "Guardar como..."
|
||||
|
||||
#: ../src/surfer.c:537
|
||||
#: ../src/surfer.c:541
|
||||
msgid "Find text"
|
||||
msgstr "Buscar"
|
||||
|
||||
#: ../src/surfer.c:544
|
||||
#: ../src/surfer.c:548
|
||||
msgid "Text:"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:551
|
||||
#: ../src/surfer.c:555
|
||||
msgid "Case-sensitive"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:553
|
||||
#: ../src/surfer.c:557
|
||||
msgid "Wrap"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:576
|
||||
#: ../src/surfer.c:580
|
||||
msgid "Text not found"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:650
|
||||
#: ../src/surfer.c:654
|
||||
msgid "Open file..."
|
||||
msgstr "Abrir..."
|
||||
|
||||
#: ../src/surfer.c:833
|
||||
#: ../src/surfer.c:837
|
||||
msgid "Web surfer - Source of "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:875 ../src/surfer.c:878
|
||||
#: ../src/surfer.c:879 ../src/surfer.c:882
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
30
po/fr.po
30
po/fr.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Surfer 0.1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-04-11 15:12+0200\n"
|
||||
"POT-Creation-Date: 2010-04-11 19:45+0200\n"
|
||||
"PO-Revision-Date: 2010-04-01 19:40+0200\n"
|
||||
"Last-Translator: Calimero <calimeroteknik@free.fr>\n"
|
||||
"Language-Team: French\n"
|
||||
@ -113,8 +113,8 @@ msgstr "0.0 Kio/s"
|
||||
msgid "Close window when the download is complete"
|
||||
msgstr "Fermer la fenêtre à la fin du téléchargement"
|
||||
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:506
|
||||
#: ../src/surfer.c:509
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:510
|
||||
#: ../src/surfer.c:513
|
||||
msgid "Error"
|
||||
msgstr "Erreur"
|
||||
|
||||
@ -157,7 +157,7 @@ msgstr "Résolu"
|
||||
msgid "Code "
|
||||
msgstr "Code "
|
||||
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:508
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:512
|
||||
msgid "Unknown error"
|
||||
msgstr "Erreur inconnue"
|
||||
|
||||
@ -303,46 +303,46 @@ msgstr "_Aide"
|
||||
msgid " Location: "
|
||||
msgstr " Adresse: "
|
||||
|
||||
#: ../src/surfer.c:254
|
||||
#: ../src/surfer.c:256
|
||||
msgid "Could not initialize HTML renderer"
|
||||
msgstr "Ne peut charger le moteur de rendu HTML"
|
||||
|
||||
#: ../src/surfer.c:455 ../src/surfer.c:458
|
||||
#: ../src/surfer.c:459 ../src/surfer.c:462
|
||||
msgid "Question"
|
||||
msgstr "Question"
|
||||
|
||||
#: ../src/surfer.c:475 ../src/surfer.c:709
|
||||
#: ../src/surfer.c:479 ../src/surfer.c:713
|
||||
msgid "Save file as..."
|
||||
msgstr "Enregistrer sous..."
|
||||
|
||||
#: ../src/surfer.c:537
|
||||
#: ../src/surfer.c:541
|
||||
msgid "Find text"
|
||||
msgstr "Chercher du texte"
|
||||
|
||||
#: ../src/surfer.c:544
|
||||
#: ../src/surfer.c:548
|
||||
msgid "Text:"
|
||||
msgstr "Texte: "
|
||||
|
||||
#: ../src/surfer.c:551
|
||||
#: ../src/surfer.c:555
|
||||
msgid "Case-sensitive"
|
||||
msgstr "Sensible à la casse"
|
||||
|
||||
#: ../src/surfer.c:553
|
||||
#: ../src/surfer.c:557
|
||||
msgid "Wrap"
|
||||
msgstr "Chercher en boucle"
|
||||
|
||||
#: ../src/surfer.c:576
|
||||
#: ../src/surfer.c:580
|
||||
msgid "Text not found"
|
||||
msgstr "Texte non trouvé"
|
||||
|
||||
#: ../src/surfer.c:650
|
||||
#: ../src/surfer.c:654
|
||||
msgid "Open file..."
|
||||
msgstr "Ouvrir un fichier..."
|
||||
|
||||
#: ../src/surfer.c:833
|
||||
#: ../src/surfer.c:837
|
||||
msgid "Web surfer - Source of "
|
||||
msgstr "Web surfer - Source de "
|
||||
|
||||
#: ../src/surfer.c:875 ../src/surfer.c:878
|
||||
#: ../src/surfer.c:879 ../src/surfer.c:882
|
||||
msgid "Warning"
|
||||
msgstr "Avertissement"
|
||||
|
30
po/it.po
30
po/it.po
@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Surfer 0.1.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2010-04-11 15:12+0200\n"
|
||||
"POT-Creation-Date: 2010-04-11 19:45+0200\n"
|
||||
"PO-Revision-Date: 2010-04-11 12:06+0200\n"
|
||||
"Last-Translator: Pierre Pronchery <khorben@defora.org>\n"
|
||||
"Language-Team: Italian\n"
|
||||
@ -113,8 +113,8 @@ msgstr ""
|
||||
msgid "Close window when the download is complete"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:506
|
||||
#: ../src/surfer.c:509
|
||||
#: ../src/download.c:263 ../src/download.c:572 ../src/surfer.c:510
|
||||
#: ../src/surfer.c:513
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
@ -157,7 +157,7 @@ msgstr ""
|
||||
msgid "Code "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:508
|
||||
#: ../src/download.c:546 ../src/ghtml-webkit.c:387 ../src/surfer.c:512
|
||||
msgid "Unknown error"
|
||||
msgstr ""
|
||||
|
||||
@ -300,46 +300,46 @@ msgstr ""
|
||||
msgid " Location: "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:254
|
||||
#: ../src/surfer.c:256
|
||||
msgid "Could not initialize HTML renderer"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:455 ../src/surfer.c:458
|
||||
#: ../src/surfer.c:459 ../src/surfer.c:462
|
||||
msgid "Question"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:475 ../src/surfer.c:709
|
||||
#: ../src/surfer.c:479 ../src/surfer.c:713
|
||||
msgid "Save file as..."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:537
|
||||
#: ../src/surfer.c:541
|
||||
msgid "Find text"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:544
|
||||
#: ../src/surfer.c:548
|
||||
msgid "Text:"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:551
|
||||
#: ../src/surfer.c:555
|
||||
msgid "Case-sensitive"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:553
|
||||
#: ../src/surfer.c:557
|
||||
msgid "Wrap"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:576
|
||||
#: ../src/surfer.c:580
|
||||
msgid "Text not found"
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:650
|
||||
#: ../src/surfer.c:654
|
||||
msgid "Open file..."
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:833
|
||||
#: ../src/surfer.c:837
|
||||
msgid "Web surfer - Source of "
|
||||
msgstr ""
|
||||
|
||||
#: ../src/surfer.c:875 ../src/surfer.c:878
|
||||
#: ../src/surfer.c:879 ../src/surfer.c:882
|
||||
msgid "Warning"
|
||||
msgstr ""
|
||||
|
@ -57,6 +57,15 @@ void on_file_close(gpointer data)
|
||||
}
|
||||
|
||||
|
||||
/* on_file_new_tab */
|
||||
void on_file_new_tab(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
||||
surfer_open_tab(surfer, NULL);
|
||||
}
|
||||
|
||||
|
||||
/* on_file_new_window */
|
||||
void on_file_new_window(gpointer data)
|
||||
{
|
||||
@ -474,6 +483,33 @@ void on_home(gpointer data)
|
||||
}
|
||||
|
||||
|
||||
/* on_notebook_close_tab */
|
||||
void on_notebook_close_tab(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
|
||||
surfer_close_tab(surfer);
|
||||
}
|
||||
|
||||
|
||||
/* on_notebook_switch_page */
|
||||
void on_notebook_switch_page(GtkWidget * widget, GtkNotebookPage * page,
|
||||
guint n, gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
GtkWidget * ghtml;
|
||||
|
||||
ghtml = gtk_notebook_get_nth_page(GTK_NOTEBOOK(surfer->notebook), n);
|
||||
/* FIXME implement:
|
||||
* - change the title (tab)
|
||||
* - update toolbar buttons */
|
||||
surfer_set_location(surfer, ghtml_get_location(ghtml));
|
||||
surfer_set_progress(surfer, ghtml_get_progress(ghtml));
|
||||
surfer_set_status(surfer, ghtml_get_status(ghtml));
|
||||
surfer_set_title(surfer, ghtml_get_title(ghtml));
|
||||
}
|
||||
|
||||
|
||||
/* on_path_activate */
|
||||
void on_path_activate(gpointer data)
|
||||
{
|
||||
|
@ -28,6 +28,7 @@ gboolean on_closex(gpointer data);
|
||||
/* file menu */
|
||||
void on_file_close(gpointer data);
|
||||
void on_file_new_window(gpointer data);
|
||||
void on_file_new_tab(gpointer data);
|
||||
void on_file_open(gpointer data);
|
||||
void on_file_open_url(gpointer data);
|
||||
void on_file_print(gpointer data);
|
||||
@ -63,4 +64,9 @@ void on_preferences(gpointer data);
|
||||
void on_refresh(gpointer data);
|
||||
void on_stop(gpointer data);
|
||||
|
||||
/* notebook */
|
||||
void on_notebook_close_tab(gpointer data);
|
||||
void on_notebook_switch_page(GtkWidget * widget, GtkNotebookPage * page,
|
||||
guint n, gpointer data);
|
||||
|
||||
#endif
|
||||
|
@ -27,7 +27,6 @@
|
||||
struct _Surfer
|
||||
{
|
||||
Config * config;
|
||||
char * url;
|
||||
|
||||
/* preferences */
|
||||
char * homepage;
|
||||
@ -46,7 +45,7 @@ struct _Surfer
|
||||
GtkToolItem * tb_fullscreen;
|
||||
GtkWidget * locationbar;
|
||||
GtkWidget * lb_path;
|
||||
GtkWidget * view;
|
||||
GtkWidget * notebook;
|
||||
GtkWidget * progress;
|
||||
GtkWidget * statusbox;
|
||||
GtkWidget * statusbar;
|
||||
|
@ -37,6 +37,7 @@ struct _Conn
|
||||
char const * anchor;
|
||||
guint64 content_length;
|
||||
guint64 data_received;
|
||||
gdouble progress;
|
||||
|
||||
int direct;
|
||||
int image;
|
||||
@ -58,6 +59,9 @@ static Conn * _conn_new(Surfer * surfer, char const * url,
|
||||
static void _conn_delete(Conn * conn);
|
||||
|
||||
/* accessors */
|
||||
static gdouble _conn_get_progress(Conn * conn);
|
||||
static void _conn_set_progress(Conn * conn, gdouble progress);
|
||||
|
||||
static void _conn_set_callback_write(Conn * conn,
|
||||
ssize_t (*callback)(Conn *, char const *, ssize_t, gpointer),
|
||||
gpointer data);
|
||||
@ -94,6 +98,7 @@ static Conn * _conn_new(Surfer * surfer, char const * url, char const * post)
|
||||
}
|
||||
conn->content_length = 0;
|
||||
conn->data_received = 0;
|
||||
conn->progress = -1.0;
|
||||
conn->direct = 0;
|
||||
conn->image = 0;
|
||||
conn->callback_write = _new_callback_write;
|
||||
@ -127,6 +132,19 @@ static void _conn_delete(Conn * conn)
|
||||
|
||||
|
||||
/* accessors */
|
||||
static gdouble _conn_get_progress(Conn * conn)
|
||||
{
|
||||
return conn->progress;
|
||||
}
|
||||
|
||||
|
||||
static void _conn_set_progress(Conn * conn, gdouble progress)
|
||||
{
|
||||
conn->progress = progress;
|
||||
surfer_set_progress(conn->surfer, progress);
|
||||
}
|
||||
|
||||
|
||||
static void _conn_set_callback_write(Conn * conn,
|
||||
ssize_t (*callback)(Conn *, char const *, ssize_t, gpointer),
|
||||
gpointer data)
|
||||
@ -159,7 +177,7 @@ static int _conn_load(Conn * conn)
|
||||
/* FIXME support "file:", report error */
|
||||
return 1;
|
||||
}
|
||||
surfer_set_progress(conn->surfer, -1.0);
|
||||
_conn_set_progress(conn, -1.0);
|
||||
surfer_set_status(conn->surfer, _("Resolving..."));
|
||||
conn->http = gnet_conn_http_new();
|
||||
gnet_conn_http_set_uri(conn->http, conn->url);
|
||||
@ -220,7 +238,7 @@ static void _http_data_complete(GConnHttpEventData * event, Conn * conn)
|
||||
if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE)
|
||||
{
|
||||
/* FIXME report error */
|
||||
surfer_set_progress(conn->surfer, -1.0);
|
||||
_conn_set_progress(conn, -1.0);
|
||||
surfer_set_status(conn->surfer, NULL);
|
||||
return;
|
||||
}
|
||||
@ -249,7 +267,7 @@ static void _http_data_progress(GConnHttpEventData * event, Conn * conn)
|
||||
conn->data_received = event->data_received;
|
||||
conn->content_length = event->content_length;
|
||||
fraction = conn->data_received;
|
||||
surfer_set_progress(conn->surfer, fraction / conn->content_length);
|
||||
_conn_set_progress(conn, fraction / conn->content_length);
|
||||
}
|
||||
|
||||
static void _http_error(GConnHttpEventError * event, Conn * conn)
|
||||
@ -271,7 +289,7 @@ static void _http_error(GConnHttpEventError * event, Conn * conn)
|
||||
msg = _("Unspecified error");
|
||||
break;
|
||||
}
|
||||
surfer_set_progress(conn->surfer, -1.0);
|
||||
_conn_set_progress(conn, -1.0);
|
||||
surfer_set_status(conn->surfer, NULL);
|
||||
surfer_error(conn->surfer, msg, 0);
|
||||
}
|
||||
@ -303,6 +321,6 @@ static void _http_response(GConnHttpEventResponse * event, Conn * conn)
|
||||
static void _http_timeout(Conn * conn)
|
||||
{
|
||||
surfer_error(conn->surfer, _("Timeout"), 0);
|
||||
surfer_set_progress(conn->surfer, -1.0);
|
||||
_conn_set_progress(conn, -1.0);
|
||||
surfer_set_status(conn->surfer, NULL);
|
||||
}
|
||||
|
@ -64,6 +64,7 @@ typedef struct _GHtml
|
||||
/* connections */
|
||||
struct _GHtmlConn ** conns;
|
||||
size_t conns_cnt;
|
||||
gdouble progress;
|
||||
|
||||
/* html widget */
|
||||
HtmlDocument * html_document;
|
||||
@ -103,6 +104,7 @@ static void _ghtmlconn_delete(GHtmlConn * ghtmlconn);
|
||||
|
||||
static char const * _ghtml_get_base(GHtml * ghtml);
|
||||
static int _ghtml_set_base(GHtml * ghtml, char const * url);
|
||||
static void _ghtml_set_progress(GHtml * ghtml, gdouble progress);
|
||||
static int _ghtml_document_load(GHtml * ghtml, gchar const * url,
|
||||
gchar const * post);
|
||||
static int _ghtml_document_reload(GHtml * ghtml);
|
||||
@ -140,6 +142,7 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
||||
ghtml->current = NULL;
|
||||
ghtml->conns = NULL;
|
||||
ghtml->conns_cnt = 0;
|
||||
ghtml->progress = -1.0;
|
||||
ghtml->html_view = html_view_new();
|
||||
g_object_set_data(G_OBJECT(ghtml->html_view), "ghtml", ghtml);
|
||||
g_signal_connect(G_OBJECT(ghtml->html_view), "button-press-event",
|
||||
@ -170,6 +173,23 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_delete */
|
||||
void ghtml_delete(GtkWidget * widget)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
size_t i;
|
||||
|
||||
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
|
||||
free(ghtml->source);
|
||||
for(i = 0; i < ghtml->conns_cnt; i++)
|
||||
if(ghtml->conns[i] != NULL)
|
||||
_ghtmlconn_delete(ghtml->conns[i]);
|
||||
free(ghtml->conns); /* may not be free()'d by _ghtmlconn_delete() */
|
||||
free(ghtml->html_title);
|
||||
free(ghtml);
|
||||
}
|
||||
|
||||
|
||||
/* accessors */
|
||||
/* ghtml_can_go_back */
|
||||
gboolean ghtml_can_go_back(GtkWidget * widget)
|
||||
@ -209,6 +229,16 @@ char const * ghtml_get_location(GtkWidget * widget)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_progress */
|
||||
gdouble ghtml_get_progress(GtkWidget * widget)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
|
||||
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
|
||||
return ghtml->progress;
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_source */
|
||||
char const * ghtml_get_source(GtkWidget * widget)
|
||||
{
|
||||
@ -219,6 +249,14 @@ char const * ghtml_get_source(GtkWidget * widget)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_status */
|
||||
char const * ghtml_get_status(GtkWidget * widget)
|
||||
{
|
||||
/* FIXME really implement */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_title */
|
||||
char const * ghtml_get_title(GtkWidget * widget)
|
||||
{
|
||||
@ -512,6 +550,14 @@ static int _ghtml_set_base(GHtml * ghtml, char const * url)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_set_progress */
|
||||
static void _ghtml_set_progress(GHtml * ghtml, gdouble progress)
|
||||
{
|
||||
surfer_set_progress(ghtml->surfer, progress);
|
||||
ghtml->progress = progress;
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_document_load */
|
||||
static int _ghtml_document_load(GHtml * ghtml, gchar const * url,
|
||||
gchar const * post)
|
||||
@ -676,7 +722,7 @@ static gboolean _stream_load_idle_directory(GHtmlConn * conn)
|
||||
#endif
|
||||
html_stream_write(conn->stream, tail, sizeof(tail) - 1);
|
||||
closedir(dir);
|
||||
surfer_set_progress(conn->ghtml->surfer, -1.0);
|
||||
_ghtml_set_progress(conn->ghtml, -1.0);
|
||||
surfer_set_status(conn->ghtml->surfer, NULL);
|
||||
_ghtmlconn_delete(conn);
|
||||
return FALSE;
|
||||
@ -698,7 +744,7 @@ static gboolean _stream_load_idle_file(GHtmlConn * conn)
|
||||
}
|
||||
else
|
||||
{
|
||||
surfer_set_progress(conn->ghtml->surfer, 0.0);
|
||||
_ghtml_set_progress(conn->ghtml, 0.0);
|
||||
surfer_set_status(conn->ghtml->surfer, _("Reading file..."));
|
||||
if(fstat(fd, &st) == 0)
|
||||
{
|
||||
@ -737,7 +783,7 @@ static gboolean _stream_load_watch_file(GIOChannel * source,
|
||||
}
|
||||
if(len == 0) /* no more data */
|
||||
{
|
||||
surfer_set_progress(conn->ghtml->surfer, 1.0);
|
||||
_ghtml_set_progress(conn->ghtml, 1.0);
|
||||
surfer_set_status(conn->ghtml->surfer, NULL);
|
||||
_ghtmlconn_delete(conn);
|
||||
return FALSE;
|
||||
@ -748,15 +794,14 @@ static gboolean _stream_load_watch_file(GIOChannel * source,
|
||||
if(conn->file_size > 0)
|
||||
{
|
||||
fraction = conn->file_read;
|
||||
surfer_set_progress(conn->ghtml->surfer,
|
||||
fraction / conn->file_size);
|
||||
_ghtml_set_progress(conn->ghtml, fraction / conn->file_size);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean _stream_load_idle_http(GHtmlConn * conn)
|
||||
{
|
||||
surfer_set_progress(conn->ghtml->surfer, -1.0);
|
||||
_ghtml_set_progress(conn->ghtml, -1.0);
|
||||
surfer_set_status(conn->ghtml->surfer, _("Resolving..."));
|
||||
conn->http = gnet_conn_http_new();
|
||||
gnet_conn_http_set_uri(conn->http, conn->url);
|
||||
@ -819,7 +864,7 @@ static void _http_data_complete(GConnHttpEventData * event, GHtmlConn * conn)
|
||||
if(gnet_conn_http_steal_buffer(conn->http, &buf, &size) != TRUE)
|
||||
{
|
||||
/* FIXME report error */
|
||||
surfer_set_progress(conn->ghtml->surfer, -1.0);
|
||||
_ghtml_set_progress(conn->ghtml, -1.0);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -875,7 +920,7 @@ static void _http_data_progress(GConnHttpEventData * event, GHtmlConn * conn)
|
||||
rec += p->data_received;
|
||||
}
|
||||
fraction = rec;
|
||||
surfer_set_progress(conn->ghtml->surfer, fraction / len);
|
||||
_ghtml_set_progress(conn->ghtml, fraction / len);
|
||||
}
|
||||
|
||||
static void _http_error(GConnHttpEventError * event, GHtmlConn * conn)
|
||||
@ -900,7 +945,7 @@ static void _http_error(GConnHttpEventError * event, GHtmlConn * conn)
|
||||
msg = _("Unspecified error");
|
||||
break;
|
||||
}
|
||||
surfer_set_progress(conn->ghtml->surfer, -1.0);
|
||||
_ghtml_set_progress(conn->ghtml, -1.0);
|
||||
surfer_set_status(conn->ghtml->surfer, NULL);
|
||||
surfer_error(conn->ghtml->surfer, msg, 0);
|
||||
_ghtmlconn_delete(conn);
|
||||
@ -947,7 +992,7 @@ static void _http_resolved(GConnHttpEventResolved * event, GHtmlConn * conn)
|
||||
if(event->ia == NULL)
|
||||
{
|
||||
#if 0 /* XXX check again if this is really an error case */
|
||||
surfer_set_progress(conn->ghtml->surfer, -1.0);
|
||||
_ghtml_set_progress(conn->ghtml, -1.0);
|
||||
surfer_set_status(conn->ghtml->surfer, NULL);
|
||||
surfer_error(conn->ghtml->surfer, "Unknown host", 0);
|
||||
_ghtmlconn_delete(conn);
|
||||
@ -994,7 +1039,7 @@ static void _http_response(GConnHttpEventResponse * event, GHtmlConn * conn)
|
||||
static void _http_timeout(GHtmlConn * conn)
|
||||
{
|
||||
surfer_error(conn->ghtml->surfer, _("Timeout"), 0);
|
||||
surfer_set_progress(conn->ghtml->surfer, -1.0);
|
||||
_ghtml_set_progress(conn->ghtml, -1.0);
|
||||
surfer_set_status(conn->ghtml->surfer, NULL);
|
||||
_ghtmlconn_delete(conn);
|
||||
}
|
||||
|
@ -270,6 +270,13 @@ static char const * _new_get_prefs_directory(void)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_delete */
|
||||
void ghtml_delete(GtkWidget * ghtml)
|
||||
{
|
||||
/* FIXME nothing to do? */
|
||||
}
|
||||
|
||||
|
||||
/* accessors */
|
||||
/* ghtml_can_go_back */
|
||||
gboolean ghtml_can_go_back(GtkWidget * ghtml)
|
||||
@ -313,6 +320,14 @@ char const * ghtml_get_location(GtkWidget * ghtml)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_progress */
|
||||
gdouble ghtml_get_progress(GtkWidget * ghtml)
|
||||
{
|
||||
/* FIXME implement */
|
||||
return -1.0;
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_source */
|
||||
char const * ghtml_get_source(GtkWidget * widget)
|
||||
{
|
||||
@ -321,6 +336,14 @@ char const * ghtml_get_source(GtkWidget * widget)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_status */
|
||||
char const * ghtml_get_status(GtkWidget * widget)
|
||||
{
|
||||
/* FIXME really implement */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_title */
|
||||
char const * ghtml_get_title(GtkWidget * ghtml)
|
||||
{
|
||||
|
@ -85,6 +85,17 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_delete */
|
||||
void ghtml_delete(GtkWidget * widget)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
|
||||
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
|
||||
_conn_delete(ghtml->conn);
|
||||
free(ghtml);
|
||||
}
|
||||
|
||||
|
||||
/* accessors */
|
||||
/* ghtml_can_go_back */
|
||||
gboolean ghtml_can_go_back(GtkWidget * widget)
|
||||
@ -124,6 +135,18 @@ char const * ghtml_get_location(GtkWidget * widget)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_progress */
|
||||
gdouble ghtml_get_progress(GtkWidget * widget)
|
||||
{
|
||||
GHtml * ghtml;
|
||||
|
||||
ghtml = g_object_get_data(G_OBJECT(widget), "ghtml");
|
||||
if(ghtml->conn == NULL)
|
||||
return -1.0;
|
||||
return _conn_get_progress(ghtml->conn);
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_source */
|
||||
char const * ghtml_get_source(GtkWidget * widget)
|
||||
{
|
||||
@ -139,6 +162,14 @@ char const * ghtml_get_source(GtkWidget * widget)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_status */
|
||||
char const * ghtml_get_status(GtkWidget * widget)
|
||||
{
|
||||
/* FIXME really implement */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_title */
|
||||
char const * ghtml_get_title(GtkWidget * widget)
|
||||
{
|
||||
|
@ -12,6 +12,8 @@
|
||||
* You should have received a copy of the GNU General Public License along with
|
||||
* Surfer; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
|
||||
* Suite 330, Boston, MA 02111-1307 USA */
|
||||
/* FIXME
|
||||
* - implement undo/redo */
|
||||
|
||||
|
||||
|
||||
@ -100,6 +102,13 @@ GtkWidget * ghtml_new(Surfer * surfer)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_delete */
|
||||
void ghtml_delete(GtkWidget * ghtml)
|
||||
{
|
||||
/* FIXME is it necessary to destroy any widget? */
|
||||
}
|
||||
|
||||
|
||||
/* accessors */
|
||||
/* ghtml_can_go_back */
|
||||
gboolean ghtml_can_go_back(GtkWidget * ghtml)
|
||||
@ -127,6 +136,7 @@ char const * ghtml_get_link_message(GtkWidget * ghtml)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_location */
|
||||
char const * ghtml_get_location(GtkWidget * ghtml)
|
||||
{
|
||||
GtkWidget * view;
|
||||
@ -138,6 +148,20 @@ char const * ghtml_get_location(GtkWidget * ghtml)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_progress */
|
||||
gdouble ghtml_get_progress(GtkWidget * ghtml)
|
||||
{
|
||||
gdouble ret;
|
||||
GtkWidget * view;
|
||||
|
||||
view = g_object_get_data(G_OBJECT(ghtml), "view");
|
||||
ret = webkit_web_view_get_progress(WEBKIT_WEB_VIEW(view));
|
||||
if(ret == 0.0)
|
||||
ret = -1.0;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_source */
|
||||
char const * ghtml_get_source(GtkWidget * ghtml)
|
||||
{
|
||||
@ -155,6 +179,14 @@ char const * ghtml_get_source(GtkWidget * ghtml)
|
||||
}
|
||||
|
||||
|
||||
/* ghtml_get_status */
|
||||
char const * ghtml_get_status(GtkWidget * widget)
|
||||
{
|
||||
/* FIXME really implement */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
char const * ghtml_get_title(GtkWidget * ghtml)
|
||||
{
|
||||
GtkWidget * view;
|
||||
@ -325,10 +357,9 @@ static WebKitWebView * _on_create_web_view(WebKitWebView * view,
|
||||
* - this is a bit ugly (showing and hiding)
|
||||
* - we may not want history etc to be copied
|
||||
* - it loads the current URL first */
|
||||
surfer_show_window(copy, FALSE);
|
||||
ret = g_object_get_data(G_OBJECT(copy->view), "view");
|
||||
ret = g_object_get_data(G_OBJECT(surfer_get_view(copy)), "view");
|
||||
g_signal_connect(G_OBJECT(ret), "web-view-ready", G_CALLBACK(
|
||||
_on_web_view_ready), copy->view);
|
||||
_on_web_view_ready), surfer_get_view(copy));
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -25,6 +25,7 @@
|
||||
/* GHTML */
|
||||
/* functions */
|
||||
GtkWidget * ghtml_new(Surfer * surfer);
|
||||
void ghtml_delete(GtkWidget * ghtml);
|
||||
|
||||
/* accessors */
|
||||
gboolean ghtml_can_go_back(GtkWidget * ghtml);
|
||||
@ -32,6 +33,7 @@ gboolean ghtml_can_go_forward(GtkWidget * ghtml);
|
||||
|
||||
char const * ghtml_get_link_message(GtkWidget * ghtml);
|
||||
char const * ghtml_get_location(GtkWidget * ghtml);
|
||||
gdouble ghtml_get_progress(GtkWidget * ghtml);
|
||||
char const * ghtml_get_source(GtkWidget * ghtml);
|
||||
char const * ghtml_get_title(GtkWidget * ghtml);
|
||||
|
||||
|
276
src/surfer.c
276
src/surfer.c
@ -31,6 +31,14 @@
|
||||
|
||||
/* Surfer */
|
||||
/* private */
|
||||
/* types */
|
||||
typedef struct _SurferIdle
|
||||
{
|
||||
Surfer * surfer;
|
||||
char * url;
|
||||
} SurferIdle;
|
||||
|
||||
|
||||
/* variables */
|
||||
static DesktopAccel _surfer_accel[] =
|
||||
{
|
||||
@ -46,6 +54,8 @@ static DesktopAccel _surfer_accel[] =
|
||||
#ifndef EMBEDDED
|
||||
static DesktopMenu _menu_file[] =
|
||||
{
|
||||
{ N_("_New tab"), G_CALLBACK(on_file_new_tab), "tab-new",
|
||||
GDK_T },
|
||||
{ N_("_New window"), G_CALLBACK(on_file_new_window), "window-new",
|
||||
GDK_N },
|
||||
{ N_("_Open..."), G_CALLBACK(on_file_open), GTK_STOCK_OPEN,
|
||||
@ -150,9 +160,33 @@ static int _config_save_string(Config * config, char const * variable,
|
||||
/* public */
|
||||
/* functions */
|
||||
/* surfer_new */
|
||||
static Surfer * _new_do(char const * url);
|
||||
static gboolean _new_idle(gpointer data);
|
||||
|
||||
Surfer * surfer_new(char const * url)
|
||||
{
|
||||
Surfer * surfer;
|
||||
SurferIdle * si;
|
||||
|
||||
if((surfer = _new_do(url)) == NULL)
|
||||
return NULL;
|
||||
gtk_widget_show(surfer->window);
|
||||
/* load url as soon as we're idle */
|
||||
if((si = malloc(sizeof(*si))) == NULL
|
||||
|| (url != NULL && (si->url = strdup(url)) == NULL))
|
||||
{
|
||||
free(si);
|
||||
surfer_delete(surfer);
|
||||
return NULL;
|
||||
}
|
||||
si->surfer = surfer;
|
||||
if(url == NULL)
|
||||
si->url = NULL;
|
||||
g_idle_add(_new_idle, si);
|
||||
return surfer;
|
||||
}
|
||||
|
||||
Surfer * _new_do(char const * url)
|
||||
{
|
||||
Surfer * surfer;
|
||||
GtkAccelGroup * group;
|
||||
@ -163,11 +197,9 @@ Surfer * surfer_new(char const * url)
|
||||
|
||||
if((surfer = malloc(sizeof(*surfer))) == NULL)
|
||||
return NULL;
|
||||
surfer->url = NULL;
|
||||
surfer->homepage = NULL;
|
||||
if((surfer->config = config_new()) == NULL
|
||||
|| surfer_config_load(surfer) != 0
|
||||
|| (url != NULL && (surfer->url = strdup(url)) == NULL))
|
||||
|| surfer_config_load(surfer) != 0)
|
||||
{
|
||||
surfer_delete(surfer);
|
||||
return NULL;
|
||||
@ -181,7 +213,7 @@ Surfer * surfer_new(char const * url)
|
||||
#if GTK_CHECK_VERSION(2, 6, 0)
|
||||
gtk_window_set_icon_name(GTK_WINDOW(surfer->window), "stock_internet");
|
||||
#endif
|
||||
surfer_set_title(surfer, NULL);
|
||||
gtk_window_set_title(GTK_WINDOW(surfer->window), "Surfer");
|
||||
g_signal_connect_swapped(G_OBJECT(surfer->window), "delete-event",
|
||||
G_CALLBACK(on_closex), surfer);
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
@ -248,14 +280,13 @@ Surfer * surfer_new(char const * url)
|
||||
on_path_activate), surfer);
|
||||
gtk_toolbar_insert(GTK_TOOLBAR(toolbar), toolitem, -1);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
|
||||
/* view */
|
||||
if((surfer->view = ghtml_new(surfer)) == NULL)
|
||||
{
|
||||
surfer_error(NULL, _("Could not initialize HTML renderer"), 0);
|
||||
surfer_delete(surfer);
|
||||
return NULL;
|
||||
}
|
||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->view, TRUE, TRUE, 0);
|
||||
/* notebook */
|
||||
surfer->notebook = gtk_notebook_new();
|
||||
gtk_notebook_set_show_border(GTK_NOTEBOOK(surfer->notebook), FALSE);
|
||||
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(surfer->notebook), FALSE);
|
||||
g_signal_connect(G_OBJECT(surfer->notebook), "switch-page", G_CALLBACK(
|
||||
on_notebook_switch_page), surfer);
|
||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->notebook, TRUE, TRUE, 0);
|
||||
/* statusbar */
|
||||
surfer->statusbox = gtk_hbox_new(FALSE, 0);
|
||||
surfer->progress = gtk_progress_bar_new();
|
||||
@ -268,7 +299,7 @@ Surfer * surfer_new(char const * url)
|
||||
gtk_widget_show_all(surfer->statusbox);
|
||||
gtk_container_add(GTK_CONTAINER(surfer->window), vbox);
|
||||
gtk_widget_grab_focus(GTK_WIDGET(surfer->lb_path));
|
||||
gtk_widget_show_all(surfer->window);
|
||||
gtk_widget_show_all(vbox);
|
||||
/* preferences window */
|
||||
surfer->pr_window = NULL;
|
||||
/* find dialog */
|
||||
@ -277,18 +308,16 @@ Surfer * surfer_new(char const * url)
|
||||
gtk_box_pack_start(GTK_BOX(vbox), surfer->statusbox, FALSE, FALSE, 0);
|
||||
surfer_set_status(surfer, NULL);
|
||||
surfer_cnt++;
|
||||
/* load url as soon as we're idle */
|
||||
/* FIXME this apparently breaks surfer_new_copy() */
|
||||
if(url != NULL)
|
||||
g_idle_add(_new_idle, surfer);
|
||||
return surfer;
|
||||
}
|
||||
|
||||
static gboolean _new_idle(gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
SurferIdle * si = data;
|
||||
|
||||
surfer_open(surfer, surfer->url);
|
||||
surfer_open_tab(si->surfer, si->url);
|
||||
free(si->url);
|
||||
free(si);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -297,8 +326,14 @@ static gboolean _new_idle(gpointer data)
|
||||
Surfer * surfer_new_copy(Surfer * surfer)
|
||||
{
|
||||
Surfer * ret;
|
||||
|
||||
if((ret = surfer_new(surfer->url)) == NULL)
|
||||
GtkWidget * view;
|
||||
char const * url;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
url = NULL;
|
||||
else
|
||||
url = ghtml_get_location(view);
|
||||
if((ret = surfer_new(url)) == NULL)
|
||||
return NULL;
|
||||
/* FIXME also copy history */
|
||||
return ret;
|
||||
@ -310,7 +345,6 @@ void surfer_delete(Surfer * surfer)
|
||||
{
|
||||
gtk_widget_destroy(surfer->window);
|
||||
config_delete(surfer->config);
|
||||
free(surfer->url);
|
||||
free(surfer->homepage);
|
||||
free(surfer);
|
||||
if(--surfer_cnt == 0)
|
||||
@ -319,6 +353,18 @@ void surfer_delete(Surfer * surfer)
|
||||
|
||||
|
||||
/* accessors */
|
||||
/* surfer_get_view */
|
||||
GtkWidget * surfer_get_view(Surfer * surfer)
|
||||
{
|
||||
int cur;
|
||||
|
||||
if((cur = gtk_notebook_get_current_page(GTK_NOTEBOOK(surfer->notebook)))
|
||||
< 0)
|
||||
return NULL;
|
||||
return gtk_notebook_get_nth_page(GTK_NOTEBOOK(surfer->notebook), cur);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_set_fullscreen */
|
||||
void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen)
|
||||
{
|
||||
@ -334,33 +380,35 @@ void surfer_set_location(Surfer * surfer, char const * url)
|
||||
{
|
||||
static int i = 0; /* XXX should be set per-window */
|
||||
GtkWidget * widget;
|
||||
char * p;
|
||||
GtkWidget * view;
|
||||
|
||||
if(url == NULL)
|
||||
url = "";
|
||||
widget = gtk_bin_get_child(GTK_BIN(surfer->lb_path));
|
||||
gtk_entry_set_text(GTK_ENTRY(widget), url);
|
||||
/* FIXME what about history? */
|
||||
if((p = strdup(url)) != NULL)
|
||||
{
|
||||
free(surfer->url);
|
||||
surfer->url = p;
|
||||
}
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return; /* XXX really correct? */
|
||||
if(i == 8)
|
||||
gtk_combo_box_remove_text(GTK_COMBO_BOX(surfer->lb_path), 0);
|
||||
else
|
||||
i++;
|
||||
gtk_combo_box_append_text(GTK_COMBO_BOX(surfer->lb_path), url);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back),
|
||||
ghtml_can_go_back(surfer->view));
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward),
|
||||
ghtml_can_go_forward(surfer->view));
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back), ghtml_can_go_back(
|
||||
view));
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward),
|
||||
ghtml_can_go_forward(view));
|
||||
}
|
||||
|
||||
|
||||
/* surfer_set_progress */
|
||||
void surfer_set_progress(Surfer * surfer, gdouble fraction)
|
||||
{
|
||||
GtkWidget * view;
|
||||
char buf[10] = " ";
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return; /* consider the current tab only */
|
||||
fraction = ghtml_get_progress(view);
|
||||
if(fraction >= 0.0 && fraction <= 1.0)
|
||||
snprintf(buf, sizeof(buf), "%.1f%%", fraction * 100);
|
||||
else
|
||||
@ -403,8 +451,12 @@ void surfer_set_status(Surfer * surfer, char const * status)
|
||||
/* surfer_set_title */
|
||||
void surfer_set_title(Surfer * surfer, char const * title)
|
||||
{
|
||||
GtkWidget * view;
|
||||
char buf[256];
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return; /* consider the current tab only */
|
||||
title = ghtml_get_title(view);
|
||||
snprintf(buf, sizeof(buf), "%s%s%s", "Web surfer", (title != NULL)
|
||||
? " - " : "", (title != NULL) ? title : "");
|
||||
gtk_window_set_title(GTK_WINDOW(surfer->window), buf);
|
||||
@ -412,6 +464,27 @@ void surfer_set_title(Surfer * surfer, char const * title)
|
||||
|
||||
|
||||
/* useful */
|
||||
/* surfer_close_tab */
|
||||
void surfer_close_tab(Surfer * surfer)
|
||||
{
|
||||
gint n;
|
||||
GtkWidget * view;
|
||||
|
||||
if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) == 1)
|
||||
{
|
||||
surfer_delete(surfer);
|
||||
return;
|
||||
}
|
||||
n = gtk_notebook_get_current_page(GTK_NOTEBOOK(surfer->notebook));
|
||||
view = gtk_notebook_get_nth_page(GTK_NOTEBOOK(surfer->notebook), n);
|
||||
ghtml_delete(view);
|
||||
gtk_notebook_remove_page(GTK_NOTEBOOK(surfer->notebook), n);
|
||||
if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) == 1)
|
||||
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(surfer->notebook),
|
||||
FALSE);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_config_load */
|
||||
int surfer_config_load(Surfer * surfer)
|
||||
{
|
||||
@ -561,10 +634,13 @@ static void _find_dialog(Surfer * surfer)
|
||||
static void _on_find_activate(GtkWidget * widget, gpointer data)
|
||||
{
|
||||
Surfer * surfer = data;
|
||||
GtkWidget * view;
|
||||
char const * text;
|
||||
gboolean sensitive;
|
||||
gboolean wrap;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
if((text = gtk_entry_get_text(GTK_ENTRY(widget))) == NULL
|
||||
|| strlen(text) == 0)
|
||||
return;
|
||||
@ -572,7 +648,7 @@ static void _on_find_activate(GtkWidget * widget, gpointer data)
|
||||
surfer->fi_case));
|
||||
wrap = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(
|
||||
surfer->fi_wrap));
|
||||
if(ghtml_find(surfer->view, text, sensitive, wrap) == TRUE)
|
||||
if(ghtml_find(view, text, sensitive, wrap) == TRUE)
|
||||
return;
|
||||
surfer_error(surfer, _("Text not found"), 0);
|
||||
}
|
||||
@ -596,9 +672,12 @@ static void _on_find_response(GtkWidget * widget, gint response, gpointer data)
|
||||
gboolean surfer_go_back(Surfer * surfer)
|
||||
{
|
||||
gboolean ret;
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return FALSE;
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), TRUE);
|
||||
ret = ghtml_go_back(surfer->view);
|
||||
ret = ghtml_go_back(view);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_back), ret);
|
||||
return ret;
|
||||
}
|
||||
@ -608,9 +687,12 @@ gboolean surfer_go_back(Surfer * surfer)
|
||||
gboolean surfer_go_forward(Surfer * surfer)
|
||||
{
|
||||
gboolean ret;
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return FALSE;
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), TRUE);
|
||||
ret = ghtml_go_forward(surfer->view);
|
||||
ret = ghtml_go_forward(view);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_forward), ret);
|
||||
return ret;
|
||||
}
|
||||
@ -630,12 +712,20 @@ void surfer_go_home(Surfer * surfer)
|
||||
/* surfer_open */
|
||||
void surfer_open(Surfer * surfer, char const * url)
|
||||
{
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
{
|
||||
surfer_open_tab(surfer, url);
|
||||
return;
|
||||
}
|
||||
if(url != NULL)
|
||||
{
|
||||
view = surfer_get_view(surfer);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_refresh), TRUE);
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), TRUE);
|
||||
ghtml_stop(surfer->view);
|
||||
ghtml_load_url(surfer->view, url);
|
||||
ghtml_stop(view);
|
||||
ghtml_load_url(view, url);
|
||||
}
|
||||
else
|
||||
gtk_widget_grab_focus(surfer->lb_path);
|
||||
@ -664,26 +754,79 @@ void surfer_open_dialog(Surfer * surfer)
|
||||
}
|
||||
|
||||
|
||||
/* surfer_open_tab */
|
||||
static GtkWidget * _tab_button(Surfer * surfer, char const * label);
|
||||
|
||||
void surfer_open_tab(Surfer * surfer, char const * url)
|
||||
{
|
||||
GtkWidget * widget;
|
||||
|
||||
if((widget = ghtml_new(surfer)) == NULL)
|
||||
{
|
||||
surfer_error(NULL, _("Could not initialize HTML renderer"), 0);
|
||||
return;
|
||||
}
|
||||
if(url != NULL)
|
||||
ghtml_load_url(widget, url);
|
||||
gtk_notebook_append_page(GTK_NOTEBOOK(surfer->notebook), widget,
|
||||
_tab_button(surfer, _("Untitled")));
|
||||
if(gtk_notebook_get_n_pages(GTK_NOTEBOOK(surfer->notebook)) > 1)
|
||||
gtk_notebook_set_show_tabs(GTK_NOTEBOOK(surfer->notebook),
|
||||
TRUE);
|
||||
gtk_widget_show_all(widget);
|
||||
}
|
||||
|
||||
static GtkWidget * _tab_button(Surfer * surfer, char const * label)
|
||||
{
|
||||
GtkWidget * hbox;
|
||||
GtkWidget * button;
|
||||
|
||||
hbox = gtk_hbox_new(FALSE, 0);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), gtk_label_new(label), TRUE, TRUE, 4);
|
||||
button = gtk_button_new();
|
||||
gtk_button_set_image(GTK_BUTTON(button), gtk_image_new_from_stock(
|
||||
GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU));
|
||||
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
|
||||
g_signal_connect_swapped(G_OBJECT(button), "clicked", G_CALLBACK(
|
||||
on_notebook_close_tab), surfer);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, TRUE, 0);
|
||||
gtk_widget_show_all(hbox);
|
||||
return hbox;
|
||||
}
|
||||
|
||||
|
||||
/* surfer_print */
|
||||
void surfer_print(Surfer * surfer)
|
||||
{
|
||||
ghtml_print(surfer->view);
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
ghtml_print(view);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_refresh */
|
||||
void surfer_refresh(Surfer * surfer)
|
||||
{
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), TRUE);
|
||||
ghtml_refresh(surfer->view);
|
||||
ghtml_refresh(view);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_reload */
|
||||
void surfer_reload(Surfer * surfer)
|
||||
{
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
gtk_widget_set_sensitive(GTK_WIDGET(surfer->tb_stop), TRUE);
|
||||
ghtml_reload(surfer->view);
|
||||
ghtml_reload(view);
|
||||
}
|
||||
|
||||
|
||||
@ -697,13 +840,16 @@ void surfer_resize(Surfer * surfer, gint width, gint height)
|
||||
/* surfer_save */
|
||||
void surfer_save(Surfer * surfer, char const * filename)
|
||||
{
|
||||
GtkWidget * view;
|
||||
char const * source;
|
||||
GtkWidget * dialog;
|
||||
size_t len;
|
||||
FILE * fp;
|
||||
char buf[256];
|
||||
|
||||
if((source = ghtml_get_source(surfer->view)) == NULL)
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
if((source = ghtml_get_source(view)) == NULL)
|
||||
return; /* XXX report error */
|
||||
if(filename == NULL)
|
||||
{
|
||||
@ -738,7 +884,11 @@ void surfer_save(Surfer * surfer, char const * filename)
|
||||
/* surfer_select_all */
|
||||
void surfer_select_all(Surfer * surfer)
|
||||
{
|
||||
ghtml_select_all(surfer->view);
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
ghtml_select_all(view);
|
||||
}
|
||||
|
||||
|
||||
@ -793,14 +943,22 @@ void surfer_show_window(Surfer * surfer, gboolean show)
|
||||
/* surfer_stop */
|
||||
void surfer_stop(Surfer * surfer)
|
||||
{
|
||||
ghtml_stop(surfer->view);
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
ghtml_stop(view);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_unselect_all */
|
||||
void surfer_unselect_all(Surfer * surfer)
|
||||
{
|
||||
ghtml_unselect_all(surfer->view);
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
ghtml_unselect_all(view);
|
||||
}
|
||||
|
||||
|
||||
@ -818,11 +976,14 @@ void surfer_view_source(Surfer * surfer)
|
||||
GtkTextBuffer * tbuf;
|
||||
PangoFontDescription * desc;
|
||||
char buf[256];
|
||||
char const * url;
|
||||
char const * source;
|
||||
|
||||
if(surfer->url == NULL)
|
||||
if((widget = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
if((source = ghtml_get_source(surfer->view)) == NULL)
|
||||
if((url = ghtml_get_location(widget)) == NULL)
|
||||
return;
|
||||
if((source = ghtml_get_source(widget)) == NULL)
|
||||
return; /* FIXME download to a temporary file and open */
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
group = gtk_accel_group_new();
|
||||
@ -831,8 +992,7 @@ void surfer_view_source(Surfer * surfer)
|
||||
GTK_ACCEL_VISIBLE, cc);
|
||||
gtk_window_add_accel_group(GTK_WINDOW(window), group);
|
||||
gtk_window_set_default_size(GTK_WINDOW(window), 640, 480);
|
||||
snprintf(buf, sizeof(buf), "%s%s", _("Web surfer - Source of "),
|
||||
surfer->url);
|
||||
snprintf(buf, sizeof(buf), "%s%s", _("Web surfer - Source of "), url);
|
||||
gtk_window_set_title(GTK_WINDOW(window), buf);
|
||||
g_signal_connect(G_OBJECT(window), "delete-event", G_CALLBACK(
|
||||
_on_source_closex), NULL);
|
||||
@ -886,21 +1046,33 @@ void surfer_warning(Surfer * surfer, char const * message)
|
||||
/* surfer_zoom_in */
|
||||
void surfer_zoom_in(Surfer * surfer)
|
||||
{
|
||||
ghtml_zoom_in(surfer->view);
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
ghtml_zoom_in(view);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_zoom_out */
|
||||
void surfer_zoom_out(Surfer * surfer)
|
||||
{
|
||||
ghtml_zoom_out(surfer->view);
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
ghtml_zoom_out(view);
|
||||
}
|
||||
|
||||
|
||||
/* surfer_zoom_reset */
|
||||
void surfer_zoom_reset(Surfer * surfer)
|
||||
{
|
||||
ghtml_zoom_reset(surfer->view);
|
||||
GtkWidget * view;
|
||||
|
||||
if((view = surfer_get_view(surfer)) == NULL)
|
||||
return;
|
||||
ghtml_zoom_reset(view);
|
||||
}
|
||||
|
||||
|
||||
|
@ -52,6 +52,8 @@ void surfer_delete(Surfer * surfer);
|
||||
|
||||
|
||||
/* accessors */
|
||||
GtkWidget * surfer_get_view(Surfer * surfer);
|
||||
|
||||
void surfer_set_fullscreen(Surfer * surfer, gboolean fullscreen);
|
||||
void surfer_set_location(Surfer * surfer, char const * url);
|
||||
void surfer_set_progress(Surfer * surfer, gdouble fraction);
|
||||
@ -69,6 +71,8 @@ void surfer_warning(Surfer * surfer, char const * message);
|
||||
|
||||
void surfer_open(Surfer * surfer, char const * url);
|
||||
void surfer_open_dialog(Surfer * surfer);
|
||||
void surfer_open_tab(Surfer * surfer, char const * url);
|
||||
void surfer_close_tab(Surfer * surfer);
|
||||
|
||||
void surfer_print(Surfer * surfer);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user