aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjcid <devnull@localhost>2008-10-01 16:08:30 +0200
committerjcid <devnull@localhost>2008-10-01 16:08:30 +0200
commitbb03b8a02fbbf22b04aa64459cf95bd9422e598d (patch)
treef897a6d1df288b5bf0a6673ac2469e173b858b9f /src
parentff1884a3ffd437d00fc64b61f8651ed8208833d7 (diff)
- Committed the no bw as window user_data() patch.
Diffstat (limited to 'src')
-rw-r--r--src/bw.c8
-rw-r--r--src/bw.h2
-rw-r--r--src/findbar.cc4
-rw-r--r--src/ui.cc64
-rw-r--r--src/ui.hh3
-rw-r--r--src/uicmd.cc43
-rw-r--r--src/uicmd.hh1
7 files changed, 60 insertions, 65 deletions
diff --git a/src/bw.c b/src/bw.c
index e93cd9a2..27f3066c 100644
--- a/src/bw.c
+++ b/src/bw.c
@@ -263,12 +263,12 @@ int a_Bw_num()
}
/*
- * TODO: remove this Hack.
+ * Return a bw by index
*/
-BrowserWindow *a_Bw_get()
+BrowserWindow *a_Bw_get(int i)
{
- if (num_bws > 0)
- return bws[0];
+ if (i >= 0 && i < num_bws)
+ return bws[i];
return NULL;
}
diff --git a/src/bw.h b/src/bw.h
index 9d294db6..f0d8dd7d 100644
--- a/src/bw.h
+++ b/src/bw.h
@@ -72,7 +72,7 @@ extern "C" {
void a_Bw_init(void);
BrowserWindow *a_Bw_new();
void a_Bw_free(BrowserWindow *bw);
-BrowserWindow *a_Bw_get();
+BrowserWindow *a_Bw_get(int i);
int a_Bw_num();
void a_Bw_add_client(BrowserWindow *bw, int Key, int Root);
diff --git a/src/findbar.cc b/src/findbar.cc
index 8cddc837..16da8f0e 100644
--- a/src/findbar.cc
+++ b/src/findbar.cc
@@ -55,7 +55,7 @@ void Findbar::search_cb(Widget *, void *vfb)
bool case_sens = fb->cb->value();
if (key[0] != '\0')
- a_UIcmd_findtext_search((BrowserWindow *) fb->window()->user_data(),
+ a_UIcmd_findtext_search(a_UIcmd_get_bw_by_widget(fb),
key, case_sens);
}
@@ -170,7 +170,7 @@ void Findbar::hide()
BrowserWindow *bw;
Group::hide();
- if ((bw = (BrowserWindow *) this->window()->user_data()))
+ if ((bw = a_UIcmd_get_bw_by_widget(this)))
a_UIcmd_findtext_reset(bw);
a_UIcmd_focus_main_area(bw);
}
diff --git a/src/ui.cc b/src/ui.cc
index a778e71a..8552c50d 100644
--- a/src/ui.cc
+++ b/src/ui.cc
@@ -99,8 +99,8 @@ int CustHighlightButton::handle(int e)
if (e == PASTE) {
const char* t = event_text();
if (t && *t) {
- a_UIcmd_set_location_text(this->window()->user_data(), t);
- a_UIcmd_open_urlstr(this->window()->user_data(), t);
+ a_UIcmd_set_location_text(a_UIcmd_get_bw_by_widget(this), t);
+ a_UIcmd_open_urlstr(a_UIcmd_get_bw_by_widget(this), t);
return 1;
}
}
@@ -154,7 +154,7 @@ static void search_cb(Widget *wid, void *data)
MSG("[Search], mouse button %d was pressed\n", k);
if (k == 1) {
- a_UIcmd_search_dialog(wid->window()->user_data());
+ a_UIcmd_search_dialog(a_UIcmd_get_bw_by_widget(wid));
} else if (k == 2) {
((UI*)data)->color_change_cb_i();
} else if (k == 3) {
@@ -203,7 +203,7 @@ static void location_cb(Widget *wid, void *data)
* The Back or Forward, buttons, or the first click on a rendered
* page. BUG: this must be investigated and reported to FLTK2 team */
if (event_key() == ReturnKey) {
- a_UIcmd_open_urlstr(i->window()->user_data(), i->value());
+ a_UIcmd_open_urlstr(a_UIcmd_get_bw_by_widget(i), i->value());
}
if (ui->get_panelmode() == UI_TEMPORARILY_SHOW_PANELS) {
ui->set_panelmode(UI_HIDDEN);
@@ -225,41 +225,41 @@ static void b1_cb(Widget *wid, void *cb_data)
switch (bn) {
case UI_BACK:
if (k == 1) {
- a_UIcmd_back(wid->window()->user_data());
+ a_UIcmd_back(a_UIcmd_get_bw_by_widget(wid));
} else if (k == 3) {
- a_UIcmd_back_popup(wid->window()->user_data());
+ a_UIcmd_back_popup(a_UIcmd_get_bw_by_widget(wid));
}
break;
case UI_FORW:
if (k == 1) {
- a_UIcmd_forw(wid->window()->user_data());
+ a_UIcmd_forw(a_UIcmd_get_bw_by_widget(wid));
} else if (k == 3) {
- a_UIcmd_forw_popup(wid->window()->user_data());
+ a_UIcmd_forw_popup(a_UIcmd_get_bw_by_widget(wid));
}
break;
case UI_HOME:
if (k == 1) {
- a_UIcmd_home(wid->window()->user_data());
+ a_UIcmd_home(a_UIcmd_get_bw_by_widget(wid));
}
break;
case UI_RELOAD:
if (k == 1) {
- a_UIcmd_reload(wid->window()->user_data());
+ a_UIcmd_reload(a_UIcmd_get_bw_by_widget(wid));
}
break;
case UI_SAVE:
if (k == 1) {
- a_UIcmd_save(wid->window()->user_data());
+ a_UIcmd_save(a_UIcmd_get_bw_by_widget(wid));
}
break;
case UI_STOP:
if (k == 1) {
- a_UIcmd_stop(wid->window()->user_data());
+ a_UIcmd_stop(a_UIcmd_get_bw_by_widget(wid));
}
break;
case UI_BOOK:
if (k == 1) {
- a_UIcmd_book(wid->window()->user_data());
+ a_UIcmd_book(a_UIcmd_get_bw_by_widget(wid));
}
break;
default:
@@ -286,9 +286,9 @@ static void bugmeter_cb(Widget *wid, void *data)
if (k && k <= 7)
MSG("[BugMeter], mouse button %d was pressed\n", k);
if (k == 1) {
- a_UIcmd_view_page_bugs(wid->window()->user_data());
+ a_UIcmd_view_page_bugs(a_UIcmd_get_bw_by_widget(wid));
} else if (k == 3) {
- a_UIcmd_bugmeter_popup(wid->window()->user_data());
+ a_UIcmd_bugmeter_popup(a_UIcmd_get_bw_by_widget(wid));
}
}
@@ -458,15 +458,15 @@ static void menubar_cb(Widget *wid, void *data)
{
if (strcmp((char*)data, "nb") == 0) {
a_UIcmd_browser_window_new(wid->window()->w(), wid->window()->h(),
- wid->window()->user_data());
+ a_UIcmd_get_bw_by_widget(wid));
} else if (strcmp((char*)data, "nt") == 0) {
- a_UIcmd_open_url_nt(wid->window()->user_data(), NULL, 1);
+ a_UIcmd_open_url_nt(a_UIcmd_get_bw_by_widget(wid), NULL, 1);
} else if (strcmp((char*)data, "of") == 0) {
- a_UIcmd_open_file(wid->window()->user_data());
+ a_UIcmd_open_file(a_UIcmd_get_bw_by_widget(wid));
} else if (strcmp((char*)data, "ou") == 0) {
- a_UIcmd_focus_location(wid->window()->user_data());
+ a_UIcmd_focus_location(a_UIcmd_get_bw_by_widget(wid));
} else if (strcmp((char*)data, "cw") == 0) {
- a_UIcmd_close_bw(wid->window()->user_data());
+ a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(wid));
} else if (strcmp((char*)data, "ed") == 0) {
a_UIcmd_close_all_bw();
}
@@ -756,7 +756,7 @@ int UI::handle(int event)
// Handle keyboard shortcuts here.
if (modifier == CTRL) {
if (k == 'b') {
- a_UIcmd_book(this->window()->user_data());
+ a_UIcmd_book(a_UIcmd_get_bw_by_widget(this));
ret = 1;
} else if (k == 'f') {
set_findbar_visibility(1);
@@ -765,22 +765,22 @@ int UI::handle(int event)
focus_location();
ret = 1;
} else if (k == 'n') {
- a_UIcmd_browser_window_new(w(), h(), this->window()->user_data());
+ a_UIcmd_browser_window_new(w(),h(),a_UIcmd_get_bw_by_widget(this));
ret = 1;
} else if (k == 'o') {
- a_UIcmd_open_file(this->window()->user_data());
+ a_UIcmd_open_file(a_UIcmd_get_bw_by_widget(this));
ret = 1;
} else if (k == 'q') {
- a_UIcmd_close_bw(this->window()->user_data());
+ a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(this));
ret = 1;
} else if (k == 'r') {
- a_UIcmd_reload(this->window()->user_data());
+ a_UIcmd_reload(a_UIcmd_get_bw_by_widget(this));
ret = 1;
} else if (k == 's') {
- a_UIcmd_search_dialog(this->window()->user_data());
+ a_UIcmd_search_dialog(a_UIcmd_get_bw_by_widget(this));
ret = 1;
} else if (k == 't') {
- a_UIcmd_open_url_nt(this->window()->user_data(), NULL, 1);
+ a_UIcmd_open_url_nt(a_UIcmd_get_bw_by_widget(this), NULL, 1);
ret = 1;
} else if (k == ' ') {
panelmode_cb_i();
@@ -789,20 +789,14 @@ int UI::handle(int event)
} else {
// Back and Forward navigation shortcuts
if (modifier == 0 && (k == BackSpaceKey || k == ',')) {
- a_UIcmd_back(this->window()->user_data());
+ a_UIcmd_back(a_UIcmd_get_bw_by_widget(this));
ret = 1;
} else if ((modifier == 0 && k == '.') ||
(modifier == SHIFT && k == BackSpaceKey)) {
- a_UIcmd_forw(this->window()->user_data());
+ a_UIcmd_forw(a_UIcmd_get_bw_by_widget(this));
ret = 1;
}
}
-
- } else if (event == FOCUS_CHANGE) {
- // The "bw" for this tab is stored in the parent window.
- // Update "bw" each time we switch tabs.
- window()->user_data(vbw());
- ret = 0;
}
if (!ret)
diff --git a/src/ui.hh b/src/ui.hh
index b14455e4..632ea307 100644
--- a/src/ui.hh
+++ b/src/ui.hh
@@ -44,7 +44,6 @@ class CustTabGroup;
// UI class definition -------------------------------------------------------
//
class UI : public fltk::Group {
- void *Bw;
CustTabGroup *Tabs;
char *TabTooltip;
@@ -109,8 +108,6 @@ public:
CustTabGroup *tabs() { return Tabs; }
void tabs(CustTabGroup *tabs) { Tabs = tabs; }
- void *vbw() { return Bw; }
- void vbw(void *v_bw) { Bw = v_bw; }
// Hooks to method callbacks
void panel_cb_i();
diff --git a/src/uicmd.cc b/src/uicmd.cc
index 95779758..333773c1 100644
--- a/src/uicmd.cc
+++ b/src/uicmd.cc
@@ -113,19 +113,27 @@ static void win_cb (fltk::Widget *w, void *cb_data) {
CustTabGroup *tabs;
int choice = 0;
- if (cb_data == NULL) {
- w->hide ();
- } else {
- // It is assumed that user_data() of a window contains a pointer
- // to the current BrowserWindow.
- tabs = BW2UI((BrowserWindow*) cb_data)->tabs();
- if (tabs->children () > 1)
- choice = a_Dialog_choice3 ("Window contains more than one tab.",
- "Close all tabs", "Cancel", NULL);
- if (choice == 0)
- for (int i = tabs->children() - 1; i >= 0; i--)
- a_UIcmd_close_bw(((UI*)tabs->child(i))->vbw());
+ tabs = BW2UI((BrowserWindow*) cb_data)->tabs();
+ if (tabs->children () > 1)
+ choice = a_Dialog_choice3 ("Window contains more than one tab.",
+ "Close all tabs", "Cancel", NULL);
+ if (choice == 0)
+ while (tabs->children())
+ a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(tabs->child(0)));
+}
+
+/*
+ * Given a UI or UI child widget, return its bw.
+ */
+BrowserWindow *a_UIcmd_get_bw_by_widget(void *v_wid)
+{
+ BrowserWindow *bw;
+ for (int i = 0; i < a_Bw_num(); ++i) {
+ bw = a_Bw_get(i);
+ if (((fltk::Widget*)bw->ui)->contains((fltk::Widget*)v_wid))
+ return bw;
}
+ return NULL;
}
/*
@@ -150,7 +158,6 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, const void *vbw)
CustTabGroup *DilloTabs = new CustTabGroup(0, 0, ww, wh);
DilloTabs->selection_color(156);
win->add(DilloTabs);
- win->callback(win_cb, (void*) NULL);
// Create and set the UI
UI *new_ui = new UI(0, 0, ww, wh, "Label", old_bw ? BW2UI(old_bw) : NULL);
@@ -184,14 +191,13 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, const void *vbw)
// Now, create a new browser window structure
new_bw = a_Bw_new();
- // Store new_bw for callback data inside UI
- new_ui->vbw(new_bw);
-
// Reference the UI from the bw
new_bw->ui = (void *)new_ui;
// Copy the layout pointer into the bw data
new_bw->render_layout = (void*)layout;
+ win->callback(win_cb, new_bw);
+
return new_bw;
}
@@ -232,9 +238,6 @@ BrowserWindow *UIcmd_tab_new(const void *vbw)
// Now, create a new browser window structure
new_bw = a_Bw_new();
- // Store new_bw for callback data inside UI
- new_ui->vbw(new_bw);
-
// Reference the UI from the bw
new_bw->ui = (void *)new_ui;
// Copy the layout pointer into the bw data
@@ -279,7 +282,7 @@ void a_UIcmd_close_all_bw()
choice = a_Dialog_choice3 ("More than one open tab or Window.",
"Close all tabs and windows", "Cancel", NULL);
if (choice == 0)
- while ((bw = a_Bw_get()))
+ while ((bw = a_Bw_get(0)))
a_UIcmd_close_bw((void*)bw);
}
diff --git a/src/uicmd.hh b/src/uicmd.hh
index 80805cab..77931d6f 100644
--- a/src/uicmd.hh
+++ b/src/uicmd.hh
@@ -9,6 +9,7 @@ extern "C" {
BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, const void *v_bw);
+BrowserWindow *a_UIcmd_get_bw_by_widget(void *v_wid);
void a_UIcmd_open_urlstr(void *vbw, const char *urlstr);
void a_UIcmd_open_url(BrowserWindow *bw, const DilloUrl *url);
void a_UIcmd_open_url_nw(BrowserWindow *bw, const DilloUrl *url);