9
9
const char * url;
10
10
} g_bookmarks[] =
11
11
{
12
+ {" Alexei Navalny (Wiki)" , " https://en.wikipedia.org/wiki/Alexei_Navalny?useskin=vector" },
12
13
{" litehtml Web Site" , " http://www.litehtml.com/" },
13
14
{" True Launch Bar" , " http://www.truelaunchbar.com/" },
14
15
{" Tordex" , " http://www.tordex.com/" },
15
16
{" Obama (Wiki)" , " https://en.wikipedia.org/wiki/Barack_Obama?useskin=vector" },
16
- {" Elizabeth II" , " https://en.wikipedia.org/wiki/Elizabeth_II?useskin=vector" },
17
- {" std::vector" , " https://en.cppreference.com/w/cpp/container/vector" },
17
+ {" Elizabeth II (Wiki) " , " https://en.wikipedia.org/wiki/Elizabeth_II?useskin=vector" },
18
+ {" std::vector" , " https://en.cppreference.com/w/cpp/container/vector" },
18
19
};
19
20
20
- browser_window::browser_window () :
21
+ browser_window::browser_window (const std::string& url) :
22
+ m_prev_state(0 ),
21
23
m_html(this ),
22
24
23
25
m_tools_render1(" Single Render" ),
@@ -50,6 +52,16 @@ browser_window::browser_window() :
50
52
m_forward_button.signal_clicked ().connect ( sigc::mem_fun (*this , &browser_window::on_forward_clicked) );
51
53
m_forward_button.set_image_from_icon_name (" go-next-symbolic" , Gtk::ICON_SIZE_BUTTON);
52
54
55
+ m_header.pack_start (m_stop_reload_button);
56
+ m_stop_reload_button.show ();
57
+ m_stop_reload_button.signal_clicked ().connect ( sigc::mem_fun (*this , &browser_window::on_stop_reload_clicked) );
58
+ m_stop_reload_button.set_image_from_icon_name (" view-refresh-symbolic" , Gtk::ICON_SIZE_BUTTON);
59
+
60
+ m_header.pack_start (m_home_button);
61
+ m_home_button.show ();
62
+ m_home_button.signal_clicked ().connect ( sigc::mem_fun (*this , &browser_window::on_home_clicked) );
63
+ m_home_button.set_image_from_icon_name (" go-home-symbolic" , Gtk::ICON_SIZE_BUTTON);
64
+
53
65
m_header.set_custom_title (m_address_bar);
54
66
m_address_bar.set_hexpand_set (true );
55
67
m_address_bar.set_hexpand ();
@@ -70,7 +82,7 @@ browser_window::browser_window() :
70
82
m_menu_bookmarks.append (m_menu_items.back ());
71
83
m_menu_items.back ().signal_activate ().connect (
72
84
sigc::bind (
73
- sigc::mem_fun (* this , &browser_window ::open_url),
85
+ sigc::mem_fun (m_html , &html_widget ::open_url),
74
86
litehtml::string (url.url )));
75
87
}
76
88
m_menu_bookmarks.show_all ();
@@ -138,7 +150,15 @@ browser_window::browser_window() :
138
150
m_scrolled_wnd.add (m_html);
139
151
m_html.show ();
140
152
153
+ signal_delete_event ().connect (sigc::mem_fun (m_html, &html_widget::on_close), false );
154
+
141
155
set_default_size (1280 , 720 );
156
+
157
+ if (!url.empty ())
158
+ {
159
+ m_html.open_url (url);
160
+ }
161
+
142
162
update_buttons ();
143
163
}
144
164
@@ -150,7 +170,7 @@ browser_window::~browser_window()
150
170
void browser_window::on_go_clicked ()
151
171
{
152
172
litehtml::string url = m_address_bar.get_text ();
153
- open_url (url);
173
+ m_html. open_url (url);
154
174
}
155
175
156
176
bool browser_window::on_address_key_press (GdkEventKey* event)
@@ -165,97 +185,51 @@ bool browser_window::on_address_key_press(GdkEventKey* event)
165
185
return false ;
166
186
}
167
187
168
- void browser_window::open_url (const litehtml::string &url)
169
- {
170
- std::string hash;
171
- std::string s_url = url;
172
-
173
- m_address_bar.set_text (url);
174
-
175
- std::string::size_type hash_pos = s_url.find_first_of (L' #' );
176
- if (hash_pos != std::wstring::npos)
177
- {
178
- hash = s_url.substr (hash_pos + 1 );
179
- s_url.erase (hash_pos);
180
- }
181
-
182
- bool open_hash_only = false ;
183
- bool reload = false ;
184
-
185
- auto current_url = m_history.current ();
186
- hash_pos = current_url.find_first_of (L' #' );
187
- if (hash_pos != std::wstring::npos)
188
- {
189
- current_url.erase (hash_pos);
190
- }
191
-
192
- if (!current_url.empty ())
193
- {
194
- if (m_history.current () != url)
195
- {
196
- if (current_url == s_url)
197
- {
198
- open_hash_only = true ;
199
- }
200
- } else
201
- {
202
- reload = true ;
203
- }
204
- }
205
- if (!open_hash_only)
206
- {
207
- m_html.open_page (url, hash);
208
- } else
209
- {
210
- m_html.show_hash (hash);
211
- }
212
- if (!reload)
213
- {
214
- m_history.url_opened (url);
215
- }
216
- update_buttons ();
217
- }
218
-
219
- void browser_window::set_url (const litehtml::string &url)
220
- {
221
- m_address_bar.set_text (url);
222
- }
223
-
224
188
void browser_window::on_forward_clicked ()
225
189
{
226
- std::string url;
227
- if (m_history.forward (url))
228
- {
229
- open_url (url);
230
- }
190
+ m_html.go_forward ();
231
191
}
232
192
233
193
void browser_window::on_back_clicked ()
234
194
{
235
- std::string url;
236
- if (m_history.back (url))
237
- {
238
- open_url (url);
239
- }
195
+ m_html.go_back ();
240
196
}
241
197
242
198
void browser_window::update_buttons ()
243
199
{
244
- std::string url;
245
- if (m_history.back (url))
246
- {
247
- m_back_button.set_state (Gtk::STATE_NORMAL);
248
- } else
249
- {
250
- m_back_button.set_state (Gtk::STATE_INSENSITIVE);
251
- }
252
- if (m_history.forward (url))
253
- {
254
- m_forward_button.set_state (Gtk::STATE_NORMAL);
255
- } else
256
- {
257
- m_forward_button.set_state (Gtk::STATE_INSENSITIVE);
258
- }
200
+ uint32_t state = m_html.get_state ();
201
+
202
+ if ((m_prev_state & page_state_has_back) != (state & page_state_has_back))
203
+ {
204
+ if (state & page_state_has_back)
205
+ {
206
+ m_back_button.set_state (Gtk::STATE_NORMAL);
207
+ } else
208
+ {
209
+ m_back_button.set_state (Gtk::STATE_INSENSITIVE);
210
+ }
211
+ }
212
+ if ((m_prev_state & page_state_has_forward) != (state & page_state_has_forward))
213
+ {
214
+ if (state & page_state_has_forward)
215
+ {
216
+ m_forward_button.set_state (Gtk::STATE_NORMAL);
217
+ } else
218
+ {
219
+ m_forward_button.set_state (Gtk::STATE_INSENSITIVE);
220
+ }
221
+ }
222
+ if ((m_prev_state & page_state_downloading) != (state & page_state_downloading))
223
+ {
224
+ if (state & page_state_downloading)
225
+ {
226
+ m_stop_reload_button.set_image_from_icon_name (" process-stop-symbolic" );
227
+ } else
228
+ {
229
+ m_stop_reload_button.set_image_from_icon_name (" view-refresh-symbolic" );
230
+ }
231
+ }
232
+ m_prev_state = state;
259
233
}
260
234
261
235
void browser_window::on_render_measure (int number)
@@ -292,3 +266,20 @@ void browser_window::on_dump()
292
266
{
293
267
m_html.dump (" /tmp/litehtml-dump.txt" );
294
268
}
269
+
270
+ void browser_window::on_stop_reload_clicked ()
271
+ {
272
+ uint32_t state = m_html.get_state ();
273
+ if (state & page_state_downloading)
274
+ {
275
+ m_html.stop_download ();
276
+ } else
277
+ {
278
+ m_html.reload ();
279
+ }
280
+ }
281
+
282
+ void browser_window::on_home_clicked ()
283
+ {
284
+ m_html.open_url (" http://www.litehtml.com/" );
285
+ }
0 commit comments