summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorRob Kendrick <rjek@netsurf-browser.org>2007-06-22 15:16:48 +0000
committerRob Kendrick <rjek@netsurf-browser.org>2007-06-22 15:16:48 +0000
commit9964008dc07d619f0e2efa65f4d012628d9f5b96 (patch)
treeb2796e794b86c0c43e8e7c38e85e79ac39a15ef8 /gtk
parent0992b00bf5ab4bcb25aad36e4f6522e466d3f53c (diff)
downloadnetsurf-9964008dc07d619f0e2efa65f4d012628d9f5b96.tar.gz
netsurf-9964008dc07d619f0e2efa65f4d012628d9f5b96.tar.bz2
Implement Open File... in nsgtk
svn path=/trunk/netsurf/; revision=3357
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtk_gui.c2
-rw-r--r--gtk/gtk_gui.h2
-rw-r--r--gtk/gtk_scaffolding.c32
-rw-r--r--gtk/res/netsurf.glade73
4 files changed, 107 insertions, 2 deletions
diff --git a/gtk/gtk_gui.c b/gtk/gtk_gui.c
index 47a3cfd04..e42236429 100644
--- a/gtk/gtk_gui.c
+++ b/gtk/gtk_gui.c
@@ -63,6 +63,7 @@ GtkWindow *wndWarning;
GladeXML *gladeWindows;
GtkWindow *wndTooltip;
GtkLabel *labelTooltip;
+GtkDialog *wndOpenFile;
/**
* Locate a shared resource file by searching known places in order.
@@ -241,6 +242,7 @@ void gui_init(int argc, char** argv)
glade_xml_get_widget(gladeWindows, "textviewGPL")), fontdesc);
wndWarning = GTK_WINDOW(glade_xml_get_widget(gladeWindows, "wndWarning"));
+ wndOpenFile = GTK_DIALOG(glade_xml_get_widget(gladeWindows, "wndOpenFile"));
nsgtk_history_init();
}
diff --git a/gtk/gtk_gui.h b/gtk/gtk_gui.h
index 448448425..4b054cfb0 100644
--- a/gtk/gtk_gui.h
+++ b/gtk/gtk_gui.h
@@ -18,3 +18,5 @@ extern GtkWindow *wndAbout;
extern GtkWindow *wndTooltip;
extern GtkLabel *labelTooltip;
+
+extern GtkDialog *wndOpenFile;
diff --git a/gtk/gtk_scaffolding.c b/gtk/gtk_scaffolding.c
index fb00ad3f1..6c8a8cdce 100644
--- a/gtk/gtk_scaffolding.c
+++ b/gtk/gtk_scaffolding.c
@@ -79,7 +79,7 @@ struct menu_events {
};
static int open_windows = 0; /**< current number of open browsers */
-
+static struct gtk_scaffolding *current_model; /**< current window for model dialogue use */
static void nsgtk_window_destroy_event(GtkWidget *, gpointer);
static void nsgtk_window_update_back_forward(struct gtk_scaffolding *);
@@ -99,6 +99,8 @@ static gboolean nsgtk_history_button_press_event(GtkWidget *, GdkEventButton *,
static void nsgtk_attach_menu_handlers(GladeXML *, gpointer);
+gboolean nsgtk_openfile_open(GtkWidget *widget, gpointer data);
+
#define MENUEVENT(x) { #x, G_CALLBACK(nsgtk_on_##x##_activate) }
#define MENUPROTO(x) static gboolean nsgtk_on_##x##_activate( \
GtkMenuItem *widget, gpointer g)
@@ -106,6 +108,7 @@ static void nsgtk_attach_menu_handlers(GladeXML *, gpointer);
/* file menu */
MENUPROTO(new_window);
MENUPROTO(open_location);
+MENUPROTO(open_file);
MENUPROTO(close_window);
MENUPROTO(quit);
@@ -138,6 +141,7 @@ static struct menu_events menu_events[] = {
/* file menu */
MENUEVENT(new_window),
MENUEVENT(open_location),
+ MENUEVENT(open_file),
MENUEVENT(close_window),
MENUEVENT(quit),
@@ -337,6 +341,24 @@ gboolean nsgtk_window_url_changed(GtkWidget *widget, GdkEventKey *event,
}
+gboolean nsgtk_openfile_open(GtkWidget *widget, gpointer data)
+{
+ struct browser_window *bw = nsgtk_get_browser_for_gui(
+ current_model->top_level);
+ char *filename = gtk_file_chooser_get_filename(
+ GTK_FILE_CHOOSER(wndOpenFile));
+ char *url = malloc(strlen(filename) + strlen("file://"));
+
+ sprintf(url, "file://%s", filename);
+
+ browser_window_go(bw, url, 0, true);
+
+ g_free(filename);
+ free(url);
+
+ return TRUE;
+}
+
/* signal handlers for menu entries */
#define MENUHANDLER(x) gboolean nsgtk_on_##x##_activate(GtkMenuItem *widget, \
gpointer g)
@@ -361,6 +383,14 @@ MENUHANDLER(open_location)
return TRUE;
}
+MENUHANDLER(open_file)
+{
+ current_model = (struct gtk_scaffolding *)g;
+ gtk_dialog_run(wndOpenFile);
+
+ return TRUE;
+}
+
MENUHANDLER(close_window)
{
struct gtk_scaffolding *gw = (struct gtk_scaffolding *)g;
diff --git a/gtk/res/netsurf.glade b/gtk/res/netsurf.glade
index 1da2eca75..eab72b498 100644
--- a/gtk/res/netsurf.glade
+++ b/gtk/res/netsurf.glade
@@ -74,7 +74,6 @@
<child>
<widget class="GtkImageMenuItem" id="open_file">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="tooltip" translatable="yes">Open a file on your computer into this browser window.</property>
<property name="label" translatable="yes">Open _file...</property>
<property name="use_underline">True</property>
@@ -5447,4 +5446,76 @@ OF THE POSSIBILITY OF SUCH DAMAGES.
</child>
</widget>
+<widget class="GtkFileChooserDialog" id="wndOpenFile">
+ <property name="action">GTK_FILE_CHOOSER_ACTION_OPEN</property>
+ <property name="local_only">True</property>
+ <property name="select_multiple">False</property>
+ <property name="show_hidden">False</property>
+ <property name="do_overwrite_confirmation">False</property>
+ <property name="title" translatable="yes">Open file</property>
+ <property name="type">GTK_WINDOW_TOPLEVEL</property>
+ <property name="window_position">GTK_WIN_POS_NONE</property>
+ <property name="modal">True</property>
+ <property name="resizable">True</property>
+ <property name="destroy_with_parent">False</property>
+ <property name="decorated">True</property>
+ <property name="skip_taskbar_hint">False</property>
+ <property name="skip_pager_hint">False</property>
+ <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+ <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+ <property name="focus_on_map">True</property>
+ <property name="urgency_hint">False</property>
+
+ <child internal-child="vbox">
+ <widget class="GtkVBox" id="dialog-vbox4">
+ <property name="visible">True</property>
+ <property name="homogeneous">False</property>
+ <property name="spacing">24</property>
+
+ <child internal-child="action_area">
+ <widget class="GtkHButtonBox" id="dialog-action_area4">
+ <property name="visible">True</property>
+ <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+ <child>
+ <widget class="GtkButton" id="button15">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-cancel</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-6</property>
+ <signal name="clicked" handler="gtk_widget_hide" object="wndOpenFile" last_modification_time="Fri, 22 Jun 2007 14:50:25 GMT"/>
+ </widget>
+ </child>
+
+ <child>
+ <widget class="GtkButton" id="button16">
+ <property name="visible">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="can_focus">True</property>
+ <property name="label">gtk-open</property>
+ <property name="use_stock">True</property>
+ <property name="relief">GTK_RELIEF_NORMAL</property>
+ <property name="focus_on_click">True</property>
+ <property name="response_id">-5</property>
+ <signal name="clicked" handler="nsgtk_openfile_open" last_modification_time="Fri, 22 Jun 2007 14:52:48 GMT"/>
+ <signal name="clicked" handler="gtk_widget_hide" object="wndOpenFile" last_modification_time="Fri, 22 Jun 2007 14:53:02 GMT"/>
+ </widget>
+ </child>
+ </widget>
+ <packing>
+ <property name="padding">0</property>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">GTK_PACK_END</property>
+ </packing>
+ </child>
+ </widget>
+ </child>
+</widget>
+
</glade-interface>