From 64d3ecbb49ca39a39fda0fe77732cb09a43a401c Mon Sep 17 00:00:00 2001 From: corvid Date: Thu, 6 Jan 2011 02:15:06 +0000 Subject: keys and mouse buttons --- src/uicmd.cc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 001165d6..6b3287a6 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -249,13 +249,13 @@ public: if (e == KEY) { int k = event_key(); // We're only interested in some flags - unsigned modifier = event_state() & (SHIFT | CTRL | ALT); - if (k == UpKey || k == DownKey || k == TabKey) { + unsigned modifier = event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); + if (k == FL_Up || k == FL_Down || k == FL_Tab) { return 0; - } else if (k == LeftKey || k == RightKey) { - if (modifier == SHIFT) { + } else if (k == FL_Left || k == FL_Right) { + if (modifier == FL_SHIFT) { int i = value(); - if (k == LeftKey) {i = i ? i-1 : children()-1;} + if (k == FL_Left) {i = i ? i-1 : children()-1;} else {i++; if (i >= children()) i = 0;} selected_child(child(i)); return 1; @@ -383,7 +383,7 @@ BrowserWindow *a_UIcmd_get_bw_by_widget(void *v_wid) } /* - * FLTK regards SHIFT + {LeftKey, Right} as navigation keys. + * FLTK regards SHIFT + {Left, Right} as navigation keys. * Special handling is required to override it. Here we route * these events directly to the recipient. * TODO: focus is not remembered correctly. -- cgit v1.2.3 From 728c7f38c7c45dc5e0b45526d62ba2caf44e4e73 Mon Sep 17 00:00:00 2001 From: corvid Date: Thu, 6 Jan 2011 02:51:08 +0000 Subject: events --- dw/fltkpreview.cc | 8 ++++---- dw/fltkviewbase.cc | 14 +++++++------- dw/fltkviewport.cc | 52 ++++++++++++++++++++++++++-------------------------- src/findbar.cc | 10 +++++----- src/keys.cc | 8 ++++---- src/menu.cc | 6 +++--- src/ui.cc | 36 ++++++++++++++++++------------------ src/uicmd.cc | 22 +++++++++++----------- src/xembed.cc | 2 +- 9 files changed, 79 insertions(+), 79 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkpreview.cc b/dw/fltkpreview.cc index 7096420f..b169ff6b 100644 --- a/dw/fltkpreview.cc +++ b/dw/fltkpreview.cc @@ -278,18 +278,18 @@ int FltkPreviewButton::handle (int event) /** \bug Some parts are missing. */ switch (event) { - case PUSH: + case FL_PUSH: window->showWindow (); return Button::handle (event); - case DRAG: + case FL_DRAG: if (window->visible ()) { - window->scrollTo (event_x_root (), event_y_root ()); + window->scrollTo (Fl::event_x_root (), Fl::event_y_root ()); return 1; } return Button::handle (event); - case RELEASE: + case FL_RELEASE: window->hideWindow (); return Button::handle (event); diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc index cab22cf4..dcc9ed08 100644 --- a/dw/fltkviewbase.cc +++ b/dw/fltkviewbase.cc @@ -184,7 +184,7 @@ void FltkViewBase::drawChildWidgets () { core::ButtonState getDwButtonState () { - int s1 = event_state (); + int s1 = Fl::event_state (); int s2 = (core::ButtonState)0; if (s1 & SHIFT) s2 |= core::SHIFT_MASK; @@ -207,7 +207,7 @@ int FltkViewBase::handle (int event) * when passed a fltk::PUSH event. " */ switch(event) { - case PUSH: + case FL_PUSH: processed = theLayout->buttonPress (this, event_clicks () + 1, translateViewXToCanvasX (event_x ()), @@ -220,7 +220,7 @@ int FltkViewBase::handle (int event) } return processed ? true : Group::handle (event); - case RELEASE: + case FL_RELEASE: processed = theLayout->buttonRelease (this, event_clicks () + 1, translateViewXToCanvasX (event_x ()), @@ -229,7 +229,7 @@ int FltkViewBase::handle (int event) _MSG("RELEASE => %s\n", processed ? "true" : "false"); return processed ? true : Group::handle (event); - case MOVE: + case FL_MOVE: mouse_x = event_x(); mouse_y = event_y(); processed = @@ -240,7 +240,7 @@ int FltkViewBase::handle (int event) _MSG("MOVE => %s\n", processed ? "true" : "false"); return processed ? true : Group::handle (event); - case DRAG: + case FL_DRAG: processed = theLayout->motionNotify (this, translateViewXToCanvasX (event_x ()), @@ -249,13 +249,13 @@ int FltkViewBase::handle (int event) _MSG("DRAG => %s\n", processed ? "true" : "false"); return processed ? true : Group::handle (event); - case ENTER: + case FL_ENTER: theLayout->enterNotify (this, translateViewXToCanvasX (event_x ()), translateViewYToCanvasY (event_y ()), getDwButtonState ()); return Group::handle (event); - case LEAVE: + case FL_LEAVE: theLayout->leaveNotify (this, getDwButtonState ()); return Group::handle (event); diff --git a/dw/fltkviewport.cc b/dw/fltkviewport.cc index 0d6c1b46..1be6f0c0 100644 --- a/dw/fltkviewport.cc +++ b/dw/fltkviewport.cc @@ -214,87 +214,87 @@ int FltkViewport::handle (int event) { _MSG("FltkViewport::handle %d\n", event); - if (hscrollbar->Rectangle::contains (event_x (), event_y ()) && - !(event_state() & (SHIFT | CTRL | ALT)) && + if (hscrollbar->Rectangle::contains (Fl::event_x (), Fl::event_y ()) && + !(Fl::event_state() & (SHIFT | CTRL | ALT)) && hscrollbar->send (event)) { return 1; } - if (vscrollbar->Rectangle::contains (event_x (), event_y ()) && + if (vscrollbar->Rectangle::contains (Fl::event_x (), Fl::event_y ()) && vscrollbar->send (event)) { return 1; } switch(event) { - case ::fltk::KEY: - /* Tell fltk we want to receive KEY events as SHORTCUT. + case FL_KEYBOARD: + /* Tell fltk we want to receive KEYBOARD events as SHORTCUT. * As we don't know the exact keybindings set by the user, we ask * for all of them (except Tab to keep form navigation). */ - if (::fltk::event_key() != FL_Tab) + if (Fl::event_key() != FL_Tab) return 0; break; - case ::fltk::FOCUS: + case FL_FOCUS: /** \bug Draw focus box. */ /* If the user clicks with the left button we take focus * and thereby unfocus any form widgets. * Otherwise we let fltk do the focus handling. */ - if (::fltk::event_button() == FL_LEFT_MOUSE || focus_index() < 0) { + if (Fl::event_button() == FL_LEFT_MOUSE || focus_index() < 0) { focus_index(-1); return 1; } break; - case ::fltk::UNFOCUS: + case FL_UNFOCUS: /** \bug Undraw focus box. */ break; - case ::fltk::PUSH: + case FL_PUSH: take_focus(); - if (::fltk::event_button() == FL_MIDDLE_MOUSE) { + if (Fl::event_button() == FL_MIDDLE_MOUSE) { /* pass event so that middle click can open link in new window */ if (FltkWidgetView::handle (event) == 0) { dragScrolling = 1; - dragX = ::fltk::event_x(); - dragY = ::fltk::event_y(); + dragX = Fl::event_x(); + dragY = Fl::event_y(); setCursor (core::style::CURSOR_MOVE); } return 1; } break; - case ::fltk::DRAG: - if (::fltk::event_button() == FL_MIDDLE_MOUSE) { + case FL_DRAG: + if (Fl::event_button() == FL_MIDDLE_MOUSE) { if (dragScrolling) { - scroll(dragX - ::fltk::event_x(), dragY - ::fltk::event_y()); - dragX = ::fltk::event_x(); - dragY = ::fltk::event_y(); + scroll(dragX - Fl::event_x(), dragY - Fl::event_y()); + dragX = Fl::event_x(); + dragY = Fl::event_y(); return 1; } } break; - case ::fltk:: MOUSEWHEEL: - return (event_dx() ? hscrollbar : vscrollbar)->handle(event); + case FL_MOUSEWHEEL: + return (Fl::event_dx() ? hscrollbar : vscrollbar)->handle(event); break; - case ::fltk::RELEASE: - if (::fltk::event_button() == FL_MIDDLE_MOUSE) { + case FL_RELEASE: + if (Fl::event_button() == FL_MIDDLE_MOUSE) { dragScrolling = 0; setCursor (core::style::CURSOR_DEFAULT); } break; - case ::fltk::ENTER: + case FL_ENTER: /* could be the result of, e.g., closing another window. */ - mouse_x = ::fltk::event_x(); - mouse_y = ::fltk::event_y(); + mouse_x = Fl::event_x(); + mouse_y = Fl::event_y(); positionChanged(); break; - case ::fltk::LEAVE: + case FL_LEAVE: mouse_x = mouse_y = -1; break; } diff --git a/src/findbar.cc b/src/findbar.cc index 915d355a..49cffcd6 100644 --- a/src/findbar.cc +++ b/src/findbar.cc @@ -34,8 +34,8 @@ public: int MyInput::handle(int e) { _MSG("findbar MyInput::handle()\n"); - int ret = 1, k = event_key(); - unsigned modifier = event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META); + int ret = 1, k = Fl::event_key(); + unsigned modifier = Fl::event_state() & (FL_SHIFT| FL_CTRL| FL_ALT|FL_META); if (e == KEY) { if (k == FL_Left || k == FL_Right) { @@ -92,7 +92,7 @@ void Findbar::search_cb2(Widget *widget, void *vfb) * Somehow fltk even regards the first loss of focus for the * window as a WHEN_ENTER_KEY_ALWAYS event. */ - if (event_key() == FL_Enter) + if (Fl::event_key() == FL_Enter) search_cb(widget, vfb); } @@ -177,8 +177,8 @@ Findbar::~Findbar() int Findbar::handle(int event) { int ret = 0; - int k = event_key(); - unsigned modifier = event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META); + int k = Fl::event_key(); + unsigned modifier = Fl::event_state() & (FL_SHIFT| FL_CTRL| FL_ALT|FL_META); if (event == KEY && modifier == 0 && k == FL_Escape) { hide(); diff --git a/src/keys.cc b/src/keys.cc index a3430c72..2343ccbb 100644 --- a/src/keys.cc +++ b/src/keys.cc @@ -173,16 +173,16 @@ KeysCommand_t Keys::getKeyCmd() KeysCommand_t ret = KEYS_NOP; KeyBinding_t keyNode; // We're only interested in some flags - keyNode.modifier = fltk::event_state() & + keyNode.modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT | FL_META); if (keyNode.modifier == FL_SHIFT && - ispunct(fltk::event_text()[0])) { + ispunct(Fl::event_text()[0])) { // Get key code for a shifted character - keyNode.key = fltk::event_text()[0]; + keyNode.key = Fl::event_text()[0]; keyNode.modifier = 0; } else { - keyNode.key = fltk::event_key(); + keyNode.key = Fl::event_key(); } _MSG("getKeyCmd: key=%d, mod=%d\n", keyNode.key, keyNode.modifier); diff --git a/src/menu.cc b/src/menu.cc index e032c189..37d78938 100644 --- a/src/menu.cc +++ b/src/menu.cc @@ -57,7 +57,7 @@ public: int button () { return EventButton; }; void draw(); int handle(int e) { - EventButton = event_button(); + EventButton = Fl::event_button(); return Item::handle(e); } }; @@ -139,7 +139,7 @@ static void Menu_open_url_nw_cb(Widget* ) static void Menu_open_url_nt_cb(Widget* ) { int focus = prefs.focus_new_tab ? 1 : 0; - if (event_state(FL_SHIFT)) focus = !focus; + if (Fl::event_state(FL_SHIFT)) focus = !focus; a_UIcmd_open_url_nt(popup_bw, popup_url, focus); } @@ -293,7 +293,7 @@ static void Menu_history_cb(Widget *wid, void *data) // Middle button, open in a new window/tab if (prefs.middle_click_opens_new_tab) { int focus = prefs.focus_new_tab ? 1 : 0; - if (event_state(FL_SHIFT)) focus = !focus; + if (Fl::event_state(FL_SHIFT)) focus = !focus; a_UIcmd_open_url_nt(popup_bw, url, focus); } else { a_UIcmd_open_url_nw(popup_bw, url); diff --git a/src/ui.cc b/src/ui.cc index c6ee971d..7e0d19a7 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -108,18 +108,18 @@ public: */ int CustInput::handle(int e) { - int k = event_key(); + int k = Fl::event_key(); _MSG("CustInput::handle event=%d\n", e); // We're only interested in some flags - unsigned modifier = event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); + unsigned modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); // Don't focus with arrow keys - if (e == FOCUS && + if (e == FL_FOCUS && (k == FL_Up || k == FL_Down || k == FL_Left || k == FL_Right)) { return 0; - } else if (e == KEY) { + } else if (e == FL_KEYBOARD) { if (modifier == FL_CTRL) { if (k == 'l') { // Make text selected when already focused. @@ -154,8 +154,8 @@ public: int CustHighlightButton::handle(int e) { - if (e == PASTE) { - const char* t = event_text(); + if (e == FL_PASTE) { + const char* t = Fl::event_text(); if (t && *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); @@ -207,7 +207,7 @@ public: */ static void search_cb(Widget *wid, void *data) { - int k = event_key(); + int k = Fl::event_key(); if (k == 1) { a_UIcmd_search_dialog(a_UIcmd_get_bw_by_widget(wid)); @@ -243,7 +243,7 @@ static void help_cb(Widget *w, void *) */ static void filemenu_cb(Widget *wid, void *) { - int k = event_key(); + int k = Fl::event_key(); if (k == 1 || k == 3) { a_UIcmd_file_popup(a_UIcmd_get_bw_by_widget(wid), wid); } @@ -256,7 +256,7 @@ static void clear_cb(Widget *w, void *data) { UI *ui = (UI*)data; - int k = event_key(); + int k = Fl::event_key(); if (k == 1) { ui->set_location(""); ui->focus_location(); @@ -288,7 +288,7 @@ static void location_cb(Widget *wid, void *data) * other events we're not interested in. For instance pressing * 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() == FL_Enter) { + if (Fl::event_key() == FL_Enter) { a_UIcmd_open_urlstr(a_UIcmd_get_bw_by_widget(i), i->value()); } if (ui->get_panelmode() == UI_TEMPORARILY_SHOW_PANELS) { @@ -303,7 +303,7 @@ static void location_cb(Widget *wid, void *data) static void b1_cb(Widget *wid, void *cb_data) { int bn = VOIDP2INT(cb_data); - int k = event_key(); + int k = Fl::event_key(); if (k && k <= 7) { _MSG("[%s], mouse button %d was pressed\n", button_names[bn], k); _MSG("mouse button %d was pressed\n", k); @@ -373,7 +373,7 @@ static void b1_cb(Widget *wid, void *cb_data) */ static void bugmeter_cb(Widget *wid, void *data) { - int k = event_key(); + int k = Fl::event_key(); if (k == 1) { a_UIcmd_view_page_bugs(a_UIcmd_get_bw_by_widget(wid)); } else if (k == 3) { @@ -778,14 +778,14 @@ UI::~UI() */ int UI::handle(int event) { - _MSG("UI::handle event=%d (%d,%d)\n", event, event_x(), event_y()); + _MSG("UI::handle event=%d (%d,%d)\n", event, Fl::event_x(), Fl::event_y()); _MSG("Panel->h()=%d Main->h()=%d\n", Panel->h() , Main->h()); int ret = 0; - if (event == KEY) { + if (event == FL_KEYBOARD) { return 0; // Receive as shortcut - } else if (event == SHORTCUT) { + } else if (event == FL_SHORTCUT) { KeysCommand_t cmd = Keys::getKeyCmd(); if (cmd == KEYS_NOP) { // Do nothing @@ -851,11 +851,11 @@ int UI::handle(int event) a_Timeout_add(0.0, a_UIcmd_close_all_bw, NULL); ret = 1; } - } else if (event == PUSH) { + } else if (event == FL_PUSH) { if (prefs.middle_click_drags_page == 0 && - event_button() == FL_MIDDLE_MOUSE && + Fl::event_button() == FL_MIDDLE_MOUSE && !a_UIcmd_pointer_on_link(a_UIcmd_get_bw_by_widget(this))) { - if (Main->Rectangle::contains (event_x (), event_y ())) { + if (Main->Rectangle::contains (Fl::event_x (), Fl::event_y ())) { /* Offer the event to Main's children (form widgets) */ int save_x = e_x, save_y = e_y; diff --git a/src/uicmd.cc b/src/uicmd.cc index 6b3287a6..21b069cf 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -246,10 +246,10 @@ public: // Don't focus with arrow keys _MSG("CustTabGroup::handle %d\n", e); fltk::Rectangle r(btn_x,0,BTN_W,BTN_H); - if (e == KEY) { - int k = event_key(); + if (e == FL_KEYBOARD) { + int k = Fl::event_key(); // We're only interested in some flags - unsigned modifier = event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); + unsigned modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); if (k == FL_Up || k == FL_Down || k == FL_Tab) { return 0; } else if (k == FL_Left || k == FL_Right) { @@ -268,9 +268,9 @@ public: BrowserWindow *bw = a_UIcmd_get_bw_by_widget(selected_child()); const char *title = a_History_get_title(NAV_TOP_UIDX(bw), 1); a_UIcmd_set_page_title(bw, title ? title : ""); - } else if (e == MOVE) { + } else if (e == FL_MOVE) { CustShrinkTabPager *cstp = (CustShrinkTabPager *) pager(); - if (event_inside(r) && children() > 1) { + if (Fl::event_inside(r) && children() > 1) { /* We're inside the button area */ cstp->btn_highlight(true); if (prefs.show_tooltip) { @@ -295,12 +295,12 @@ public: } } } - } else if (e == PUSH && event_inside(r) && - event_button() == 1 && children() > 1) { + } else if (e == FL_PUSH && Fl::event_inside(r) && + Fl::event_button() == 1 && children() > 1) { buttonPushed = true; return 1; /* non-zero */ - } else if (e == RELEASE) { - if (event_inside(r) && event_button() == 1 && + } else if (e == FL_RELEASE) { + if (Fl::event_inside(r) && Fl::event_button() == 1 && children() > 1 && buttonPushed) { a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(selected_child())); } else { @@ -308,13 +308,13 @@ public: cstp->btn_highlight(false); } buttonPushed = false; - } else if (e == DRAG) { + } else if (e == FL_DRAG) { /* Ignore this event */ return 1; } int ret = TabGroup::handle(e); - if (e == PUSH) { + if (e == FL_PUSH) { /* WORKAROUND: FLTK raises the window on unhandled clicks, * which we do not want. */ diff --git a/src/xembed.cc b/src/xembed.cc index 04a4362a..49828ffe 100644 --- a/src/xembed.cc +++ b/src/xembed.cc @@ -71,7 +71,7 @@ Xembed::sendXembedEvent(uint32_t message) { int Xembed::handle(int e) { - if (e == fltk::PUSH) + if (e == FL_PUSH) sendXembedEvent(XEMBED_REQUEST_FOCUS); return Window::handle(e); -- cgit v1.2.3 From 91a6eef96200b8449e72030c766c514b1a07785c Mon Sep 17 00:00:00 2001 From: corvid Date: Thu, 6 Jan 2011 03:38:57 +0000 Subject: some UI constants --- dw/fltkpreview.cc | 2 +- dw/fltkui.cc | 4 ++-- src/dialog.cc | 12 ++++++------ src/findbar.cc | 2 +- src/ui.cc | 32 ++++++++++++++++---------------- src/uicmd.cc | 2 +- 6 files changed, 27 insertions(+), 27 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkpreview.cc b/dw/fltkpreview.cc index b169ff6b..0de11404 100644 --- a/dw/fltkpreview.cc +++ b/dw/fltkpreview.cc @@ -169,7 +169,7 @@ void FltkPreview::drawFltkWidget (::fltk::Widget *widget, FltkPreviewWindow::FltkPreviewWindow (dw::core::Layout *layout): MenuWindow (1, 1) { - box (EMBOSSED_BOX); + box (FL_EMBOSSED_BOX); begin (); preview = new FltkPreview (BORDER_WIDTH, BORDER_WIDTH, 1, 1, layout); diff --git a/dw/fltkui.cc b/dw/fltkui.cc index abf82993..ccccc711 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -432,7 +432,7 @@ int FltkComplexButtonResource::reliefYThickness () button->callback (widgetCallback, this); button->when (FL_WHEN_RELEASE); if (!relief) - button->box(::fltk::FLAT_BOX); + button->box(FL_FLAT_BOX); flatView = new FltkFlatView (allocation->x + reliefXThickness (), allocation->y + reliefYThickness (), @@ -483,7 +483,7 @@ FltkEntryResource::~FltkEntryResource () if (label) { input->label(label); - input->set_flag(::fltk::ALIGN_INSIDE_LEFT); + input->set_flag(FL_ALIGN_INSIDE); } if (initText) input->value (initText); diff --git a/src/dialog.cc b/src/dialog.cc index 47af9921..82dd1e45 100644 --- a/src/dialog.cc +++ b/src/dialog.cc @@ -197,8 +197,8 @@ int a_Dialog_choice5(const char *QuestionTxt, window->resizable(ib); Widget *box = new Widget(0,0,ww,wh-bh, QuestionTxt); - box->box(DOWN_BOX); - box->labelfont(HELVETICA_BOLD_ITALIC); + box->box(FL_DOWN_BOX); + box->labelfont(FL_HELVETICA_BOLD_ITALIC); box->labelsize(14); HighlightButton *b; @@ -207,8 +207,8 @@ int a_Dialog_choice5(const char *QuestionTxt, xpos += gap; for (int i=1; i <= nb; ++i) { b = new HighlightButton(xpos, wh-bh, bw, bh, txt[i]); - b->align(ALIGN_WRAP|ALIGN_CLIP); - b->box(UP_BOX); + b->align(FL_ALIGN_WRAP|FL_ALIGN_CLIP); + b->box(FL_UP_BOX); b->callback(choice5_cb, INT2VOIDP(i)); xpos += bw + gap; } @@ -253,9 +253,9 @@ int a_Dialog_user_password(const char *message, UserPasswordCB cb, void *vp) /* message */ WordwrapOutput *message_output = new WordwrapOutput(20,20,window_w-40,100); - message_output->box(DOWN_BOX); + message_output->box(FL_DOWN_BOX); message_output->text(message); - message_output->textfont(HELVETICA_BOLD_ITALIC); + message_output->textfont(FL_HELVETICA_BOLD_ITALIC); message_output->textsize(14); /* inputs */ diff --git a/src/findbar.cc b/src/findbar.cc index 713b13ac..84396954 100644 --- a/src/findbar.cc +++ b/src/findbar.cc @@ -117,7 +117,7 @@ Findbar::Findbar(int width, int height) : int x = border; height -= 2 * border; - box(PLASTIC_UP_BOX); + box(FL_PLASTIC_UP_BOX); Group::hide(); begin(); diff --git a/src/ui.cc b/src/ui.cc index a7d2f756..a17b2376 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -505,12 +505,12 @@ PackedGroup *UI::make_progress_bars(int wide, int thin_up) ProgBox->begin(); // Images IProg = new CustProgressBox(0,0,0,0); - IProg->box(thin_up ? THIN_UP_BOX : EMBOSSED_BOX); + IProg->box(thin_up ? FL_THIN_UP_BOX : FL_EMBOSSED_BOX); IProg->labelcolor(GRAY10); IProg->update_label(wide ? "Images\n0 of 0" : "0 of 0"); // Page PProg = new CustProgressBox(0,0,0,0); - PProg->box(thin_up ? THIN_UP_BOX : EMBOSSED_BOX); + PProg->box(thin_up ? FL_THIN_UP_BOX : FL_EMBOSSED_BOX); PProg->labelcolor(GRAY10); PProg->update_label(wide ? "Page\n0.0KB" : "0.0KB"); ProgBox->type(PackedGroup::ALL_CHILDREN_VERTICAL); @@ -537,7 +537,7 @@ Widget *UI::make_filemenu_button() h = fh; btn->resize(w+padding,h); _MSG("UI::make_filemenu_button w=%d h=%d padding=%d\n", w, h, padding); - btn->box(PanelSize == P_large ? FLAT_BOX : THIN_UP_BOX); + btn->box(PanelSize == P_large ? FL_FLAT_BOX : FL_THIN_UP_BOX); btn->callback(filemenu_cb, this); if (prefs.show_tooltip) btn->tooltip("File menu"); @@ -593,7 +593,7 @@ Group *UI::make_panel(int ww) g1 = new Group(0,0,ww,bh); // Toolbar pg = make_toolbar(ww,bh); - pg->box(EMBOSSED_BOX); + pg->box(FL_EMBOSSED_BOX); g1->add(pg); w = make_filemenu_button(); pg->add(w); @@ -611,7 +611,7 @@ Group *UI::make_panel(int ww) // File menu if (PanelSize == P_large) { g3 = new Group(0,0,ww,lh); - g3->box(FLAT_BOX); + g3->box(FL_FLAT_BOX); Widget *bn = make_filemenu_button(); g3->add(bn); g3->add_resizable(*new InvisibleBox(bn->w(),0,ww - bn->w(),lh)); @@ -648,8 +648,8 @@ Group *UI::make_panel(int ww) pg->add(w); g3->resizable(pg); // Better than 'w3' and it also works - pg->box(BORDER_FRAME); - //g3->box(EMBOSSED_BOX); + pg->box(FL_BORDER_FRAME); + //g3->box(FL_EMBOSSED_BOX); g3->end(); g1->resizable(g3); @@ -670,7 +670,7 @@ Group *UI::make_status_panel(int ww) // Status box Status = new Output(0, 0, ww-bm_w, s_h, 0); Status->value(""); - Status->box(THIN_DOWN_BOX); + Status->box(FL_THIN_DOWN_BOX); Status->clear_click_to_focus(); Status->clear_tab_to_focus(); Status->color(GRAY80); @@ -680,8 +680,8 @@ Group *UI::make_status_panel(int ww) // Bug Meter BugMeter = new HighlightButton(ww-bm_w,0,bm_w,s_h,0); BugMeter->image(icons->ImgMeterOK); - BugMeter->box(THIN_DOWN_BOX); - BugMeter->align(ALIGN_INSIDE|ALIGN_CLIP|ALIGN_LEFT); + BugMeter->box(FL_THIN_DOWN_BOX); + BugMeter->align(FL_ALIGN_INSIDE|FL_ALIGN_CLIP|FL_ALIGN_LEFT); if (prefs.show_tooltip) BugMeter->tooltip("Show HTML bugs\n(right-click for menu)"); BugMeter->callback(bugmeter_cb, this); @@ -731,12 +731,12 @@ UI::UI(int x, int y, int ww, int wh, const char* label, const UI *cur_ui) : // Render area Main = new Widget(0,0,1,1,"Welcome..."); - Main->box(FLAT_BOX); + Main->box(FL_FLAT_BOX); Main->color(GRAY15); - Main->labelfont(HELVETICA_BOLD_ITALIC); + Main->labelfont(FL_HELVETICA_BOLD_ITALIC); Main->labelsize(36); - Main->labeltype(SHADOW_LABEL); - Main->labelcolor(WHITE); + Main->labeltype(FL_SHADOW_LABEL); + Main->labelcolor(FL_WHITE); TopGroup->add(Main); TopGroup->resizable(Main); MainIdx = TopGroup->find(Main); @@ -1117,8 +1117,8 @@ void UI::set_render_layout(Widget &nw) TopGroup->replace(MainIdx, nw); delete(Main); Main = &nw; - //TopGroup->box(DOWN_BOX); - //TopGroup->box(BORDER_FRAME); + //TopGroup->box(FL_DOWN_BOX); + //TopGroup->box(FL_BORDER_FRAME); TopGroup->resizable(TopGroup->child(MainIdx)); } diff --git a/src/uicmd.cc b/src/uicmd.cc index 21b069cf..bfc35ed9 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -89,7 +89,7 @@ public: setcolor(btn_hl ? 206 : GRAY75); fillrect(r); if (btn_hl) { - setcolor(WHITE); + setcolor(FL_WHITE); strokerect(r); } setcolor(GRAY10); -- cgit v1.2.3 From a3777e2c753de7b7587384f14a5b3846bbc9e50a Mon Sep 17 00:00:00 2001 From: corvid Date: Thu, 6 Jan 2011 18:36:36 +0000 Subject: RAW_LABEL is SHORTCUT_LABEL --- dw/fltkui.cc | 14 +++++++------- src/menu.cc | 2 +- src/ui.cc | 2 +- src/uicmd.cc | 1 - 4 files changed, 9 insertions(+), 10 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkui.cc b/dw/fltkui.cc index ccccc711..8c8f5aad 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -260,7 +260,7 @@ FltkLabelButtonResource::~FltkLabelButtonResource () new ::fltk::Button (allocation->x, allocation->y, allocation->width, allocation->ascent + allocation->descent, label); - button->set_flag (::fltk::RAW_LABEL); + button->clear_flag (SHORTCUT_LABEL); button->callback (widgetCallback, this); button->when (FL_WHEN_RELEASE); return button; @@ -720,7 +720,7 @@ FltkCheckButtonResource::~FltkCheckButtonResource () ::fltk::CheckButton *cb = new ::fltk::CheckButton (allocation->x, allocation->y, allocation->width, allocation->ascent + allocation->descent); - cb->set_flag (::fltk::RAW_LABEL); + cb->clear_flag (SHORTCUT_LABEL); return cb; } @@ -833,7 +833,7 @@ void FltkRadioButtonResource::buttonClicked () new ::fltk::RadioButton (allocation->x, allocation->y, allocation->width, allocation->ascent + allocation->descent); - button->set_flag (::fltk::RAW_LABEL); + button->clear_flag (SHORTCUT_LABEL); button->when (FL_WHEN_CHANGED); button->callback (widgetCallback, this); button->type (::fltk::Button::TOGGLE); @@ -864,7 +864,7 @@ template ::fltk::Item *FltkSelectionResource::Item::createNewWidget (int index) { ::fltk::Item *item = new ::fltk::Item (name); - item->set_flag (::fltk::RAW_LABEL); + item->clear_flag (SHORTCUT_LABEL); item->user_data ((void *) index); return item; } @@ -874,7 +874,7 @@ template FltkSelectionResource::Item::createNewGroupWidget () { ::fltk::ItemGroup *itemGroup = new ::fltk::ItemGroup (name); - itemGroup->set_flag (::fltk::RAW_LABEL); + itemGroup->clear_flag (SHORTCUT_LABEL); itemGroup->user_data ((void *) -1L); return itemGroup; } @@ -1076,7 +1076,7 @@ FltkOptionMenuResource::~FltkOptionMenuResource () new ::fltk::Choice (allocation->x, allocation->y, allocation->width, allocation->ascent + allocation->descent); - menu->set_flag (::fltk::RAW_LABEL); + menu->clear_flag (SHORTCUT_LABEL); menu->callback(widgetCallback,this); return menu; } @@ -1147,7 +1147,7 @@ FltkListResource::~FltkListResource () allocation->ascent + allocation->descent); if (mode == SELECTION_MULTIPLE) menu->type(::fltk::Browser::MULTI); - menu->set_flag (::fltk::RAW_LABEL); + menu->clear_flag (SHORTCUT_LABEL); menu->callback(widgetCallback,this); menu->when(FL_WHEN_CHANGED); return menu; diff --git a/src/menu.cc b/src/menu.cc index 37d78938..37ddd3f1 100644 --- a/src/menu.cc +++ b/src/menu.cc @@ -412,7 +412,7 @@ void a_Menu_page_popup(BrowserWindow *bw, const DilloUrl *url, } i = new Item(label); - i->set_flag(RAW_LABEL); + i->clear_flag(SHORTCUT_LABEL); i->user_data(a_Url_dup(url)); i->callback(Menu_stylesheet_cb); stylesheets->add(i); diff --git a/src/ui.cc b/src/ui.cc index a17b2376..c46021ea 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -705,7 +705,7 @@ UI::UI(int x, int y, int ww, int wh, const char* label, const UI *cur_ui) : TopGroup = new PackedGroup(0, 0, ww, wh); add(TopGroup); resizable(TopGroup); - set_flag(RAW_LABEL); + clear_flag(SHORTCUT_LABEL); if (cur_ui) { PanelSize = cur_ui->PanelSize; diff --git a/src/uicmd.cc b/src/uicmd.cc index bfc35ed9..c0f18487 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -421,7 +421,6 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, win->shortcut(0); // Ignore Escape if (prefs.buffered_drawing != 2) win->clear_double_buffer(); - win->set_flag(RAW_LABEL); CustTabGroup *DilloTabs = new CustTabGroup(0, 0, ww, wh); DilloTabs->clear_tab_to_focus(); DilloTabs->selection_color(156); -- cgit v1.2.3 From 96f93a6aad702dfe4e1989d1e57841e2b5296d21 Mon Sep 17 00:00:00 2001 From: corvid Date: Fri, 7 Jan 2011 13:19:23 +0000 Subject: some uicmd --- src/uicmd.cc | 33 +++++++++++++++------------------ 1 file changed, 15 insertions(+), 18 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index c0f18487..24c0b413 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -16,11 +16,8 @@ #include #include /* for rint */ -#include -#include -#include -#include -#include +#include +#include #include "paths.hh" #include "keys.hh" @@ -226,18 +223,18 @@ TabGroupPager* CustShrinkTabPager::clone() const { /* * For custom handling of keyboard */ -class CustTabGroup : public fltk::TabGroup { - Tooltip *toolTip; +class CustTabGroup : public Fl_Tabs { + Fl_Tooltip *toolTip; bool tooltipEnabled; bool buttonPushed; public: CustTabGroup (int x, int y, int ww, int wh, const char *lbl=0) : - TabGroup(x,y,ww,wh,lbl) { + Fl_Tabs(x,y,ww,wh,lbl) { // The parameter pager is cloned, so free it. CustShrinkTabPager *cp = new CustShrinkTabPager(); this->pager(cp); delete cp; - toolTip = new Tooltip; + toolTip = new Fl_Tooltip; tooltipEnabled = false; buttonPushed = false; }; @@ -312,7 +309,7 @@ public: /* Ignore this event */ return 1; } - int ret = TabGroup::handle(e); + int ret = Fl_Tabs::handle(e); if (e == FL_PUSH) { /* WORKAROUND: FLTK raises the window on unhandled clicks, @@ -323,8 +320,8 @@ public: return ret; } - void remove (Widget *w) { - TabGroup::remove (w); + void remove (Fl_Widget *w) { + Fl_Tabs::remove (w); /* fixup resizable in case we just removed it */ if (resizable () == w) { if (children () > 0) @@ -337,8 +334,8 @@ public: hideLabels (); } - void add (Widget *w) { - TabGroup::add (w); + void add (Fl_Widget *w) { + Fl_Tabs::add (w); if (children () > 1) showLabels (); } @@ -356,7 +353,7 @@ public: //---------------------------------------------------------------------------- -static void win_cb (fltk::Widget *w, void *cb_data) { +static void win_cb (Fl_Widget *w, void *cb_data) { int choice = 0; CustTabGroup *tabs = (CustTabGroup*) cb_data; @@ -376,7 +373,7 @@ 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)) + if (((Fl_Widget*)bw->ui)->contains((Fl_Widget*)v_wid)) return bw; } return NULL; @@ -405,7 +402,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, { BrowserWindow *old_bw = (BrowserWindow*)vbw; BrowserWindow *new_bw = NULL; - Window *win; + Fl_Window *win; if (ww <= 0 || wh <= 0) { // Set default geometry from dillorc. @@ -416,7 +413,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, if (xid) win = new Xembed(xid, ww, wh); else - win = new Window(ww, wh); + win = new Fl_Window(ww, wh); win->shortcut(0); // Ignore Escape if (prefs.buffered_drawing != 2) -- cgit v1.2.3 From b77e43108fc62c1d0358f4ab6f627a8fa81c4245 Mon Sep 17 00:00:00 2001 From: corvid Date: Tue, 11 Jan 2011 21:06:25 +0000 Subject: more uicmd --- src/uicmd.cc | 65 +++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 36 insertions(+), 29 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 24c0b413..9122a105 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -17,7 +17,9 @@ #include /* for rint */ #include +#include #include +#include #include "paths.hh" #include "keys.hh" @@ -53,10 +55,10 @@ using namespace dw::fltk; */ static char *save_dir = NULL; -using namespace fltk; - //---------------------------------------------------------------------------- +#if 0 + #define BTN_W 25 #define BTN_H 20 @@ -217,7 +219,7 @@ int CustShrinkTabPager::update_positions( TabGroupPager* CustShrinkTabPager::clone() const { return new CustShrinkTabPager(*this); } - +#endif /* custom pager */ //---------------------------------------------------------------------------- /* @@ -231,9 +233,9 @@ public: CustTabGroup (int x, int y, int ww, int wh, const char *lbl=0) : Fl_Tabs(x,y,ww,wh,lbl) { // The parameter pager is cloned, so free it. - CustShrinkTabPager *cp = new CustShrinkTabPager(); - this->pager(cp); - delete cp; +// CustShrinkTabPager *cp = new CustShrinkTabPager(); +// this->pager(cp); +// delete cp; toolTip = new Fl_Tooltip; tooltipEnabled = false; buttonPushed = false; @@ -242,7 +244,7 @@ public: int handle(int e) { // Don't focus with arrow keys _MSG("CustTabGroup::handle %d\n", e); - fltk::Rectangle r(btn_x,0,BTN_W,BTN_H); +// fltk::Rectangle r(btn_x,0,BTN_W,BTN_H); if (e == FL_KEYBOARD) { int k = Fl::event_key(); // We're only interested in some flags @@ -251,20 +253,27 @@ public: return 0; } else if (k == FL_Left || k == FL_Right) { if (modifier == FL_SHIFT) { - int i = value(); + int i = find(value()); if (k == FL_Left) {i = i ? i-1 : children()-1;} else {i++; if (i >= children()) i = 0;} - selected_child(child(i)); + value(child(i)); return 1; } // Avoid focus change. return 0; } - } else if (e == FOCUS_CHANGE) { - // Update the window title - BrowserWindow *bw = a_UIcmd_get_bw_by_widget(selected_child()); - const char *title = a_History_get_title(NAV_TOP_UIDX(bw), 1); - a_UIcmd_set_page_title(bw, title ? title : ""); + } else if (e == FL_RELEASE) { + Fl_Widget *new_focus = which(Fl::event_x(), Fl::event_y()); + + if (new_focus && new_focus != value()) { + // Update the window title + BrowserWindow *bw = a_UIcmd_get_bw_by_widget(new_focus); + const char *title = a_History_get_title(NAV_TOP_UIDX(bw), 1); + + a_UIcmd_set_page_title(bw, title ? title : ""); + } +// custom pager +#if 0 } else if (e == FL_MOVE) { CustShrinkTabPager *cstp = (CustShrinkTabPager *) pager(); if (Fl::event_inside(r) && children() > 1) { @@ -299,12 +308,13 @@ public: } else if (e == FL_RELEASE) { if (Fl::event_inside(r) && Fl::event_button() == 1 && children() > 1 && buttonPushed) { - a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(selected_child())); + a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(value())); } else { CustShrinkTabPager *cstp = (CustShrinkTabPager *) pager(); cstp->btn_highlight(false); } buttonPushed = false; +#endif } else if (e == FL_DRAG) { /* Ignore this event */ return 1; @@ -412,14 +422,15 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, if (xid) win = new Xembed(xid, ww, wh); - else + else if (prefs.buffered_drawing != 2) win = new Fl_Window(ww, wh); + else + win = new Fl_Double_Window(ww, wh); - win->shortcut(0); // Ignore Escape - if (prefs.buffered_drawing != 2) - win->clear_double_buffer(); +//may need a handler for this +// win->shortcut(0); // Ignore Escape CustTabGroup *DilloTabs = new CustTabGroup(0, 0, ww, wh); - DilloTabs->clear_tab_to_focus(); + DilloTabs->clear_visible_focus(); DilloTabs->selection_color(156); win->add(DilloTabs); @@ -436,10 +447,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, if (old_bw == NULL && prefs.xpos >= 0 && prefs.ypos >= 0) { // position the first window according to preferences - fltk::Rectangle r; - new_ui->window()->borders(&r); - // borders() gives x and y border sizes as negative values - new_ui->window()->position(prefs.xpos - r.x(), prefs.ypos - r.y()); + new_ui->window()->position(prefs.xpos, prefs.ypos); } // Now create the Dw render layout and viewport @@ -540,9 +548,8 @@ void a_UIcmd_close_bw(void *vbw) delete(layout); if (ui->tabs()) { ui->tabs()->remove(ui); - ui->tabs()->value(ui->tabs()->children() - 1); - if (ui->tabs()->value() != -1) - ui->tabs()->selected_child()->take_focus(); + if (ui->tabs()->value()) + ui->tabs()->value()->take_focus(); else ui->tabs()->window()->hide(); } @@ -653,7 +660,7 @@ void a_UIcmd_open_url_nt(void *vbw, const DilloUrl *url, int focus) BrowserWindow *new_bw = UIcmd_tab_new(vbw); if (focus) - BW2UI(new_bw)->tabs()->selected_child(BW2UI(new_bw)); + BW2UI(new_bw)->tabs()->value(BW2UI(new_bw)); UIcmd_open_url_nbw(new_bw, url); } @@ -1221,7 +1228,7 @@ void a_UIcmd_set_page_title(BrowserWindow *bw, const char *label) const int size = 128; char title[size]; - if (a_UIcmd_get_bw_by_widget(BW2UI(bw)->tabs()->selected_child()) == bw) { + if (a_UIcmd_get_bw_by_widget(BW2UI(bw)->tabs()->value()) == bw) { // This is the focused bw, set window title if (snprintf(title, size, "Dillo: %s", label) >= size) { uint_t i = MIN(size - 4, 1 + a_Utf8_end_of_char(title, size - 8)); -- cgit v1.2.3 From 0996de0d697c3b5baface97f05b18353f7f30d64 Mon Sep 17 00:00:00 2001 From: corvid Date: Sun, 23 Jan 2011 23:28:22 +0000 Subject: prevent new Fl_Widgets from automatically being added to a Fl_Group --- dw/fltkcomplexbutton.cc | 1 + dw/fltkviewbase.cc | 1 + src/findbar.cc | 15 ++++++++++----- src/uicmd.cc | 2 ++ 4 files changed, 14 insertions(+), 5 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkcomplexbutton.cc b/dw/fltkcomplexbutton.cc index 6efe0181..3ef50238 100644 --- a/dw/fltkcomplexbutton.cc +++ b/dw/fltkcomplexbutton.cc @@ -168,6 +168,7 @@ int ComplexButton::handle(int event) { */ ComplexButton::ComplexButton(int X, int Y, int W, int H, const char *L) : Fl_Group(X,Y,W,H,L) { + Fl_Group::current(0); box(FL_UP_BOX); down_box(FL_NO_BOX); value_ = oldval = 0; diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc index f29c9a12..5c2a3639 100644 --- a/dw/fltkviewbase.cc +++ b/dw/fltkviewbase.cc @@ -41,6 +41,7 @@ bool FltkViewBase::backBufferInUse; FltkViewBase::FltkViewBase (int x, int y, int w, int h, const char *label): Fl_Group (x, y, w, h, label) { + Fl_Group::current(0); canvasWidth = 1; canvasHeight = 1; bgColor = FL_WHITE; diff --git a/src/findbar.cc b/src/findbar.cc index dd792833..5dd45bd6 100644 --- a/src/findbar.cc +++ b/src/findbar.cc @@ -113,18 +113,21 @@ Findbar::Findbar(int width, int height) : int border = 2; int input_width = width - (2 * border + 4 * (button_width + gap)); int x = border; + + Fl_Group::current(0); + height -= 2 * border; box(FL_PLASTIC_UP_BOX); Fl_Group::hide(); - begin(); hide_btn = new Fl_Button(x, border, 16, height, 0); hideImg = new Fl_Pixmap(new_s_xpm); hide_btn->image(hideImg); x += 16 + gap; hide_btn->callback(hide_cb, this); hide_btn->clear_visible_focus(); + add(hide_btn); i = new MyInput(x, border, input_width, height); x += input_width + gap; @@ -132,25 +135,27 @@ Findbar::Findbar(int width, int height) : i->color(206); i->when(FL_WHEN_ENTER_KEY_ALWAYS); i->callback(search_cb2, this); + add(i); next_btn = new Fl_Button(x, border, button_width, height, "Next"); x += button_width + gap; next_btn->shortcut(FL_Enter); next_btn->callback(search_cb, this); next_btn->clear_visible_focus(); + add(next_btn); prev_btn= new Fl_Button(x, border, button_width, height, "Previous"); + x += button_width + gap; prev_btn->shortcut(FL_SHIFT+FL_Enter); prev_btn->callback(searchBackwards_cb, this); prev_btn->clear_visible_focus(); - x += button_width + gap; + add(prev_btn); check_btn = new Fl_Check_Button(x, border, 2*button_width, height, "Case-sensitive"); - check_btn->clear_visible_focus(); x += 2 * button_width + gap; - - end(); + check_btn->clear_visible_focus(); + add(check_btn); if (prefs.show_tooltip) { hide_btn->tooltip("Hide"); diff --git a/src/uicmd.cc b/src/uicmd.cc index 9122a105..04d1f0f6 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -232,6 +232,7 @@ class CustTabGroup : public Fl_Tabs { public: CustTabGroup (int x, int y, int ww, int wh, const char *lbl=0) : Fl_Tabs(x,y,ww,wh,lbl) { + Fl_Group::current(0); // The parameter pager is cloned, so free it. // CustShrinkTabPager *cp = new CustShrinkTabPager(); // this->pager(cp); @@ -427,6 +428,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, else win = new Fl_Double_Window(ww, wh); + Fl_Group::current(0); //may need a handler for this // win->shortcut(0); // Ignore Escape CustTabGroup *DilloTabs = new CustTabGroup(0, 0, ww, wh); -- cgit v1.2.3 From 2a51e4ae8a467b83ba98818cf52cf5e0b9270877 Mon Sep 17 00:00:00 2001 From: corvid Date: Tue, 25 Jan 2011 21:13:56 +0000 Subject: FL_NO_BOX for tabs when labels not shown --- src/uicmd.cc | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 04d1f0f6..d22c8e32 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -233,6 +233,7 @@ public: CustTabGroup (int x, int y, int ww, int wh, const char *lbl=0) : Fl_Tabs(x,y,ww,wh,lbl) { Fl_Group::current(0); + box(FL_NO_BOX); // The parameter pager is cloned, so free it. // CustShrinkTabPager *cp = new CustShrinkTabPager(); // this->pager(cp); @@ -341,14 +342,18 @@ public: resizable (NULL); } - if (children () < 2) + if (children () < 2) { + box(FL_NO_BOX); hideLabels (); + } } void add (Fl_Widget *w) { Fl_Tabs::add (w); - if (children () > 1) + if (children () > 1) { + box(FL_THIN_UP_BOX); showLabels (); + } } void hideLabels() { -- cgit v1.2.3 From 39174335692871d5375bc3d4581b661d4f2d7e67 Mon Sep 17 00:00:00 2001 From: corvid Date: Thu, 3 Feb 2011 08:16:56 +0000 Subject: rm clear_visible_focus() on tabs --- src/uicmd.cc | 1 - 1 file changed, 1 deletion(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index d22c8e32..885d704e 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -437,7 +437,6 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, //may need a handler for this // win->shortcut(0); // Ignore Escape CustTabGroup *DilloTabs = new CustTabGroup(0, 0, ww, wh); - DilloTabs->clear_visible_focus(); DilloTabs->selection_color(156); win->add(DilloTabs); -- cgit v1.2.3 From fc99fd7a3497252746618a0d6f94b823aed1ff12 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Sun, 6 Feb 2011 14:40:09 -0300 Subject: imported patch choice5 --- src/dialog.cc | 56 +++++++++++++++++++++++++------------------------------- src/dialog.hh | 2 -- src/nav.c | 6 +++--- src/uicmd.cc | 12 ++++++------ 4 files changed, 34 insertions(+), 42 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/dialog.cc b/src/dialog.cc index 5db6b54f..c932118e 100644 --- a/src/dialog.cc +++ b/src/dialog.cc @@ -36,18 +36,6 @@ void a_Dialog_msg(const char *msg) fl_message("%s", msg); } -/* - * Offer a three choice dialog. - * The option string that begins with "*" is the default. - * - * Return: 0, 1 or 2 (esc = 2, window close = 2) - */ -int a_Dialog_choice3(const char *msg, - const char *b0, const char *b1, const char *b2) -{ - return fl_choice(msg, b0, b1, b2); -} - /* * Dialog for one line of Input with a message. */ @@ -161,35 +149,33 @@ PORT1.3 /*--------------------------------------------------------------------------*/ static int choice5_answer; -#if 0 -PORT1.3 static void choice5_cb(Fl_Widget *button, void *number) { choice5_answer = VOIDP2INT(number); _MSG("choice5_cb: %d\n", choice5_answer); - button->window()->make_exec_return(true); + button->window()->hide(); } -#endif /* - * Make a question-dialog with a question and some alternatives. + * Make a question-dialog with a question and up to five alternatives. + * (if less alternatives, non used parameters must be NULL). + * * Return value: 0 = dialog was cancelled, 1-5 = selected alternative. */ int a_Dialog_choice5(const char *QuestionTxt, const char *alt1, const char *alt2, const char *alt3, const char *alt4, const char *alt5) { -#if 0 -PORT1.3 choice5_answer = 0; - int ww = 440, wh = 150, bw = 50, bh = 45, nb = 0; + int ww = 440, wh = 120, bw = 50, bh = 45, ih = 50, nb = 0; const char *txt[7]; txt[0] = txt[6] = NULL; txt[1] = alt1; txt[2] = alt2; txt[3] = alt3; txt[4] = alt4; txt[5] = alt5; - for (int i=1; txt[i]; ++i, ++nb) ; + for (int i=1; txt[i]; ++i, ++nb); + ww = 140 + nb*(bw+10); Fl_Window *window = new Fl_Window(ww,wh,"Choice5"); window->begin(); @@ -197,10 +183,20 @@ PORT1.3 ib->begin(); window->resizable(ib); - Fl_Box *box = new Fl_Box(0,0,ww,wh-bh, QuestionTxt); - box->box(FL_DOWN_BOX); - box->labelfont(FL_HELVETICA_BOLD_ITALIC); + /* '?' Icon */ + Fl_Box* o = new Fl_Box(10, (wh-bh-ih)/2, ih, ih); + o->box(FL_THIN_UP_BOX); + o->labelfont(FL_TIMES_BOLD); + o->labelsize(34); + o->color(FL_WHITE); + o->labelcolor(FL_BLUE); + o->label("?"); + o->show(); + + Fl_Box *box = new Fl_Box(60,0,ww-60,wh-bh, QuestionTxt); + box->labelfont(FL_HELVETICA); box->labelsize(14); + box->align(FL_ALIGN_WRAP); Fl_Button *b; int xpos = 0, gap = 8; @@ -212,18 +208,16 @@ PORT1.3 b->box(FL_UP_BOX); b->callback(choice5_cb, INT2VOIDP(i)); xpos += bw + gap; + /* TODO: set focus to the *-prefixed alternative */ } window->end(); - //window->hotspot(box); - window->exec(); - delete window; - _MSG("Choice5 answer = %d\n", choice5_answer); + window->show(); + while (window->shown()) + Fl::wait(); + _MSG("a_Dialog_choice5 answer = %d\n", choice5_answer); return choice5_answer; -#else -return 1 + fl_choice(QuestionTxt, alt1, alt2, alt3); -#endif } diff --git a/src/dialog.hh b/src/dialog.hh index 440e9bba..57b21849 100644 --- a/src/dialog.hh +++ b/src/dialog.hh @@ -9,8 +9,6 @@ typedef void (*UserPasswordCB)(const char *user, const char *password, void *vp); void a_Dialog_msg(const char *msg); -int a_Dialog_choice3(const char *msg, - const char *b0, const char *b1, const char *b2); int a_Dialog_choice5(const char *QuestionTxt, const char *alt1, const char *alt2, const char *alt3, const char *alt4, const char *alt5); diff --git a/src/nav.c b/src/nav.c index c5311cfb..7f9d03db 100644 --- a/src/nav.c +++ b/src/nav.c @@ -488,9 +488,9 @@ static void Nav_reload_callback(void *data) confirmed = 0; } else if (URL_FLAGS(h_url) & URL_Post) { /* Attempt to repost data, let's confirm... */ - choice = a_Dialog_choice3("Repost form data?", - "Yes", "*No", "Cancel"); - confirmed = (choice == 0); /* "Yes" */ + choice = a_Dialog_choice5("Repost form data?", + "No", "Yes", "Cancel", NULL, NULL); + confirmed = (choice == 2); /* "Yes" */ } if (confirmed) { diff --git a/src/uicmd.cc b/src/uicmd.cc index 885d704e..e005aaf6 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -374,9 +374,9 @@ static void win_cb (Fl_Widget *w, void *cb_data) { CustTabGroup *tabs = (CustTabGroup*) cb_data; if (tabs->children () > 1) - choice = a_Dialog_choice3 ("Window contains more than one tab.", - "Close all tabs", "Cancel", NULL); - if (choice == 0) + choice = a_Dialog_choice5("Window contains more than one tab.", + "Close all tabs", "Cancel", NULL, NULL, NULL); + if (choice == 1) while (tabs->children()) a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(tabs->child(0))); } @@ -573,9 +573,9 @@ void a_UIcmd_close_all_bw(void *) int choice = 0; if (a_Bw_num() > 1) - choice = a_Dialog_choice3 ("More than one open tab or Window.", - "Close all tabs and windows", "Cancel", NULL); - if (choice == 0) + choice = a_Dialog_choice5("More than one open tab or Window.", + "Close all tabs and windows", "Cancel", NULL, NULL, NULL); + if (choice == 1) while ((bw = a_Bw_get(0))) a_UIcmd_close_bw((void*)bw); } -- cgit v1.2.3 From f359543fa273a205b0111e824d34fca839cd3b45 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Sun, 6 Feb 2011 22:13:53 -0300 Subject: choice5 part2 (minor fix) --- src/uicmd.cc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index e005aaf6..0c25a4f4 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -370,7 +370,7 @@ public: //---------------------------------------------------------------------------- static void win_cb (Fl_Widget *w, void *cb_data) { - int choice = 0; + int choice = 1; CustTabGroup *tabs = (CustTabGroup*) cb_data; if (tabs->children () > 1) @@ -570,7 +570,7 @@ void a_UIcmd_close_bw(void *vbw) void a_UIcmd_close_all_bw(void *) { BrowserWindow *bw; - int choice = 0; + int choice = 1; if (a_Bw_num() > 1) choice = a_Dialog_choice5("More than one open tab or Window.", -- cgit v1.2.3 From 91775fc630020de9f8505fa731272763167cb08e Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Wed, 9 Mar 2011 14:20:19 -0300 Subject: Made a brand new CustTabs class (to allow fine control of tabs). --- src/ui.hh | 8 +- src/uicmd.cc | 472 ++++++++++++++++++++--------------------------------------- 2 files changed, 165 insertions(+), 315 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/ui.hh b/src/ui.hh index b2c69f8e..053e85d9 100644 --- a/src/ui.hh +++ b/src/ui.hh @@ -35,7 +35,7 @@ typedef enum { // Private classes class CustProgressBox; -class CustTabGroup; +class CustTabs; // Class definition ---------------------------------------------------------- @@ -115,7 +115,7 @@ public: // UI class definition ------------------------------------------------------- // class UI : public Fl_Pack { - CustTabGroup *Tabs; + CustTabs *Tabs; char *TabTooltip; Fl_Group *TopGroup; @@ -172,8 +172,8 @@ public: Fl_Widget *fullscreen_button() { return FullScreen; } void fullscreen_toggle() { FullScreen->do_callback(); } - CustTabGroup *tabs() { return Tabs; } - void tabs(CustTabGroup *tabs) { Tabs = tabs; } + CustTabs *tabs() { return Tabs; } + void tabs(CustTabs *tabs) { Tabs = tabs; } int pointerOnLink() { return PointerOnLink; } void pointerOnLink(int flag) { PointerOnLink = flag; } diff --git a/src/uicmd.cc b/src/uicmd.cc index 0c25a4f4..74cfbb7b 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -16,10 +16,11 @@ #include #include /* for rint */ +#include #include #include -#include -#include +#include +#include #include "paths.hh" #include "keys.hh" @@ -57,321 +58,193 @@ static char *save_dir = NULL; //---------------------------------------------------------------------------- -#if 0 - -#define BTN_W 25 -#define BTN_H 20 -static int btn_x; +/* + * CustTabs --------------------------------------------------------------- + */ /* - * Adds a tab-close button at the rightmost part + * stores the respective UI pointer */ -class CustShrinkTabPager : public TabGroupPager { - bool btn_hl; - TabGroup *tg; +class CustTabButton : public Fl_Button { + UI *ui_; public: - int update_positions( - TabGroup *g, int numchildren, int &selected, - int &cumulated_width, int &available_width, - int *tab_pos, int *tab_width); - virtual int which(TabGroup* g, int m_x,int m_y); - virtual TabGroupPager* clone() const; - virtual const char * mode_name() const {return "Shrink";} - virtual int id() const {return PAGER_SHRINK;} - virtual int available_width(TabGroup *g) const; - virtual bool draw_tabs(TabGroup* g, int selected, int* tab_pos, - int* tab_width) { - if (!tg) tg = g; - if (g->children() > 1) { - fltk::Rectangle r(btn_x,0,BTN_W,BTN_H); - setcolor(btn_hl ? 206 : GRAY75); - fillrect(r); - if (btn_hl) { - setcolor(FL_WHITE); - strokerect(r); - } - setcolor(GRAY10); - //fltk::setfont(fltk::getfont()->bold(), fltk::getsize()); - r.h(r.h()-2); - drawtext("X", r, ALIGN_CENTER); - return false; - } else { - // WORKAROUND: for http://fltk.org/str.php?L2062 - // By returning true we avoid a call to TabGroup::draw_tab() - // in TabGroup::draw() in case we don't show the tabs. - return true; - } - } + CustTabButton (int x,int y,int w,int h, const char* label = 0) : + Fl_Button (x,y,w,h,label) { ui_ = NULL; }; + void ui(UI *pui) { ui_ = pui; } + UI *ui(void) { return ui_; } +}; - void btn_highlight(bool flag) { - if (btn_hl != flag) { - btn_hl = flag; - if (tg) - tg->redraw(DAMAGE_VALUE); - } +/* + * Allows fine control of the tabbed interface + */ +class CustTabs : public CustGroup { + int tab_w, tab_h, tab_n; + Fl_Wizard *Wizard; + int tabcolor_inactive, tabcolor_active, curtab_idx; +public: + CustTabs (int ww, int wh, int th, const char *lbl=0) : + CustGroup(0,0,ww,th,lbl) { + tab_w = 80, tab_h = th, tab_n = 0, curtab_idx = -1; + tabcolor_active = FL_DARK_CYAN; tabcolor_inactive = 206; + //Fl_Box *w = new Fl_Box(tab_w,0,ww-tab_w,tab_h,"i n v i s i b l e"); + Fl_Box *w = new Fl_Box(0,0,0,0,"i n v i s i b l e"); + w->box(FL_NO_BOX); + resizable(0); + end(); + + Wizard = new Fl_Wizard(0,tab_h,ww,wh-tab_h); + Wizard->end(); + add_new_tab(1); }; - bool btn_highlight() { return btn_hl; }; - - CustShrinkTabPager() : TabGroupPager() { - noclip(true); - btn_hl = false; - tg = NULL; - } + int handle(int e); + UI *add_new_tab(int focus); + void remove_tab(); + Fl_Wizard *wizard(void) { return Wizard; } + int get_btn_idx(UI *ui); + void switch_tab(CustTabButton *cbtn); + void prev_tab(void); + void next_tab(void); }; -int CustShrinkTabPager::available_width(TabGroup *g) const -{ - _MSG("CustShrinkTabPager::available_width\n"); - int w = MAX (g->w() - this->slope()-1 - BTN_W, 0); - btn_x = w + 6; - return w; -} - -int CustShrinkTabPager::which(TabGroup* g, int event_x,int event_y) -{ - int H = g->tab_height(); - if (!H) return -1; - if (H < 0) { - if (event_y > g->h() || event_y < g->h()+H) return -1; - } else { - if (event_y > H || event_y < 0) return -1; - } - if (event_x < 0) return -1; - int p[128], w[128]; - int selected = g->tab_positions(p, w); - int d = (event_y-(H>=0?0:g->h()))*slope()/H; - for (int i=0; ichildren(); i++) { - if (event_x < p[i+1]+(ivalue()); + ret = 1; + } else if (k == 't') { + add_new_tab(1); + } else if (k == 'q') { + remove_tab(); + } + } } - return -1; + + return (ret) ? ret : CustGroup::handle(e); } /* - * Prevents tabs from going over the close-tab button. - * Modified from fltk-2.0.x-r6525. + * Create a new tab with its own UI */ -int CustShrinkTabPager::update_positions( - TabGroup *g, int numchildren, int &selected, - int &cumulated_width, int &available_width, - int *tab_pos, int *tab_width) +UI *CustTabs::add_new_tab(int focus) { - available_width-=BTN_W; + char tab_label[64]; - // uh oh, they are too big, we must move them: - // special case when the selected tab itself is too big, make it fill - // cumulated_width: - int i; + current(0); + UI *new_ui = new UI(0,tab_h,Wizard->w(),Wizard->h()); + new_ui->tabs(this); + Wizard->add(new_ui); - if (tab_width[selected] >= available_width) { - tab_width[selected] = available_width; - for (i = 0; i <= selected; i++) - tab_pos[i] = 0; - for (i = selected + 1; i <= numchildren; i++) - tab_pos[i] = available_width; - return selected; - } + int ntabs = children(); + snprintf(tab_label, 64,"ctab%d", ++tab_n); + CustTabButton *btn = new CustTabButton((ntabs-1)*tab_w,0,tab_w,tab_h); + btn->copy_label(tab_label); + btn->clear_visible_focus(); + btn->box(FL_PLASTIC_ROUND_UP_BOX); + btn->color(tabcolor_active); + btn->ui(new_ui); + add(btn); + btn->redraw(); + //btn->callback(tab_btn_cb, this); - int w2[128]; + if (focus) + switch_tab(btn); + rearrange(); - for (i = 0; i < numchildren; i++) - w2[i] = tab_width[i]; - i = numchildren - 1; - int j = 0; + return new_ui; +} - int minsize = 5; +void CustTabs::remove_tab() +{ + CustTabButton *btn; + UI *ui = (UI*)Wizard->value(); - bool right = true; + // the invisible box is also a child + if (children() == 2) + exit(0); - while (cumulated_width > available_width) { - int n; // which one to shrink + // remove label button + int idx = get_btn_idx(ui); + btn = (CustTabButton*)child(idx); + idx > 1 ? prev_tab() : next_tab(); + remove(idx); + delete btn; + rearrange(); + redraw(); - if (j < selected && (!right || i <= selected)) { // shrink a left one - n = j++; - right = true; - } else if (i > selected) { // shrink a right one - n = i--; - right = false; - } else { // no more space, start making them zero - minsize = 0; - i = numchildren - 1; - j = 0; - right = true; - continue; - } - cumulated_width -= w2[n] - minsize; - w2[n] = minsize; - if (cumulated_width < available_width) { - w2[n] = available_width - cumulated_width + minsize; - cumulated_width = available_width; - break; - } - } - // re-sum the positions: - cumulated_width = 0; - for (i = 0; i < numchildren; i++) { - cumulated_width += w2[i]; - tab_pos[i+1] = cumulated_width; - } - return selected; + Wizard->remove(ui); + delete(ui); } -TabGroupPager* CustShrinkTabPager::clone() const { - return new CustShrinkTabPager(*this); +int CustTabs::get_btn_idx(UI *ui) +{ + for (int i = children()-1; i; --i) { + CustTabButton *btn = (CustTabButton*)child(i); + if (btn->ui() == ui) + return i; + } + return -1; } -#endif /* custom pager */ -//---------------------------------------------------------------------------- -/* - * For custom handling of keyboard - */ -class CustTabGroup : public Fl_Tabs { - Fl_Tooltip *toolTip; - bool tooltipEnabled; - bool buttonPushed; -public: - CustTabGroup (int x, int y, int ww, int wh, const char *lbl=0) : - Fl_Tabs(x,y,ww,wh,lbl) { - Fl_Group::current(0); - box(FL_NO_BOX); - // The parameter pager is cloned, so free it. -// CustShrinkTabPager *cp = new CustShrinkTabPager(); -// this->pager(cp); -// delete cp; - toolTip = new Fl_Tooltip; - tooltipEnabled = false; - buttonPushed = false; - }; - ~CustTabGroup() { delete toolTip; } - int handle(int e) { - // Don't focus with arrow keys - _MSG("CustTabGroup::handle %d\n", e); -// fltk::Rectangle r(btn_x,0,BTN_W,BTN_H); - if (e == FL_KEYBOARD) { - int k = Fl::event_key(); - // We're only interested in some flags - unsigned modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); - if (k == FL_Up || k == FL_Down || k == FL_Tab) { - return 0; - } else if (k == FL_Left || k == FL_Right) { - if (modifier == FL_SHIFT) { - int i = find(value()); - if (k == FL_Left) {i = i ? i-1 : children()-1;} - else {i++; if (i >= children()) i = 0;} - value(child(i)); - return 1; - } - // Avoid focus change. - return 0; - } - } else if (e == FL_RELEASE) { - Fl_Widget *new_focus = which(Fl::event_x(), Fl::event_y()); - - if (new_focus && new_focus != value()) { - // Update the window title - BrowserWindow *bw = a_UIcmd_get_bw_by_widget(new_focus); - const char *title = a_History_get_title(NAV_TOP_UIDX(bw), 1); - - a_UIcmd_set_page_title(bw, title ? title : ""); - } -// custom pager -#if 0 - } else if (e == FL_MOVE) { - CustShrinkTabPager *cstp = (CustShrinkTabPager *) pager(); - if (Fl::event_inside(r) && children() > 1) { - /* We're inside the button area */ - cstp->btn_highlight(true); - if (prefs.show_tooltip) { - /* Prepare the tooltip for pop-up */ - tooltipEnabled = true; - /* We use parent() if available because we are returning 0. - * Returning without having TabGroup processing makes the - * popup event never reach 'this', but it reaches parent() */ - toolTip->enter(parent() ?parent():this, r, "Close current Tab"); - } - return 0; // Change focus - } else { - cstp->btn_highlight(false); - - if (prefs.show_tooltip) { - /* Hide the tooltip or enable it again.*/ - if (tooltipEnabled) { - tooltipEnabled = false; - toolTip->exit(); - } else { - toolTip->enable(); - } - } - } - } else if (e == FL_PUSH && Fl::event_inside(r) && - Fl::event_button() == 1 && children() > 1) { - buttonPushed = true; - return 1; /* non-zero */ - } else if (e == FL_RELEASE) { - if (Fl::event_inside(r) && Fl::event_button() == 1 && - children() > 1 && buttonPushed) { - a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(value())); - } else { - CustShrinkTabPager *cstp = (CustShrinkTabPager *) pager(); - cstp->btn_highlight(false); - } - buttonPushed = false; -#endif - } else if (e == FL_DRAG) { - /* Ignore this event */ - return 1; - } - int ret = Fl_Tabs::handle(e); +void CustTabs::switch_tab(CustTabButton *cbtn) +{ + int idx; + CustTabButton *btn; + UI *old_ui = (UI*)Wizard->value(); - if (e == FL_PUSH) { - /* WORKAROUND: FLTK raises the window on unhandled clicks, - * which we do not want. - */ - ret = 1; + if (cbtn->ui() != old_ui) { + // Set old tab label to normal color + if ((idx = get_btn_idx(old_ui)) > 0) { + btn = (CustTabButton*)child(idx); + btn->color(tabcolor_inactive); + btn->redraw(); } - return ret; + Wizard->value(cbtn->ui()); + cbtn->color(tabcolor_active); + cbtn->redraw(); } +} - void remove (Fl_Widget *w) { - Fl_Tabs::remove (w); - /* fixup resizable in case we just removed it */ - if (resizable () == w) { - if (children () > 0) - resizable (child (children () - 1)); - else - resizable (NULL); - } +void CustTabs::prev_tab() +{ + int idx; - if (children () < 2) { - box(FL_NO_BOX); - hideLabels (); - } - } + if ((idx = get_btn_idx((UI*)Wizard->value())) > 1) + switch_tab( (CustTabButton*)child(idx-1) ); +} + +void CustTabs::next_tab() +{ + int idx; + + if ((idx = get_btn_idx((UI*)Wizard->value())) > 0 && idx+1 < children()) + switch_tab( (CustTabButton*)child(idx+1) ); +} - void add (Fl_Widget *w) { - Fl_Tabs::add (w); - if (children () > 1) { - box(FL_THIN_UP_BOX); - showLabels (); - } - } - void hideLabels() { - for (int i = children () - 1; i >= 0; i--) - child(i)->resize(x(), y(), w(), h()); - } - void showLabels() { - for (int i = children () - 1; i >= 0; i--) - child(i)->resize(x(), y() + 20, w(), h() - 20); - } -}; //---------------------------------------------------------------------------- static void win_cb (Fl_Widget *w, void *cb_data) { int choice = 1; - CustTabGroup *tabs = (CustTabGroup*) cb_data; + CustTabs *tabs = (CustTabs*) cb_data; if (tabs->children () > 1) choice = a_Dialog_choice5("Window contains more than one tab.", @@ -434,26 +307,19 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, win = new Fl_Double_Window(ww, wh); Fl_Group::current(0); -//may need a handler for this -// win->shortcut(0); // Ignore Escape - CustTabGroup *DilloTabs = new CustTabGroup(0, 0, ww, wh); + CustTabs *DilloTabs = new CustTabs(ww, wh, 16); DilloTabs->selection_color(156); win->add(DilloTabs); // Create and set the UI - UI *new_ui = new UI(0, 0, ww, wh, DEFAULT_TAB_LABEL, - old_bw ? BW2UI(old_bw) : NULL); - new_ui->set_status("http://www.dillo.org/"); - new_ui->tabs(DilloTabs); - - DilloTabs->add(new_ui); - DilloTabs->resizable(new_ui); - DilloTabs->window()->resizable(new_ui); - DilloTabs->window()->show(); + UI *new_ui = DilloTabs->add_new_tab(1); + win->resizable(new_ui); + win->show(); + //DilloTabs->window()->show(); if (old_bw == NULL && prefs.xpos >= 0 && prefs.ypos >= 0) { // position the first window according to preferences - new_ui->window()->position(prefs.xpos, prefs.ypos); + DilloTabs->window()->position(prefs.xpos, prefs.ypos); } // Now create the Dw render layout and viewport @@ -492,7 +358,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, * Create a new Tab. * i.e the new UI and its associated BrowserWindow data structure. */ -static BrowserWindow *UIcmd_tab_new(const void *vbw) +static BrowserWindow *UIcmd_tab_new(const void *vbw, int focus) { _MSG(" UIcmd_tab_new vbw=%p\n", vbw); @@ -508,13 +374,7 @@ static BrowserWindow *UIcmd_tab_new(const void *vbw) 0, vbw); // Create and set the UI - UI *new_ui = new UI(0, 0, ui->w(), ui->h(), DEFAULT_TAB_LABEL, ui); - new_ui->tabs(ui->tabs()); - - new_ui->tabs()->add(new_ui); - new_ui->tabs()->resizable(new_ui); - new_ui->tabs()->window()->resizable(new_ui); - new_ui->tabs()->window()->show(); + UI *new_ui = ui->tabs()->add_new_tab(focus); // Now create the Dw render layout and viewport FltkPlatform *platform = new FltkPlatform (); @@ -553,14 +413,8 @@ void a_UIcmd_close_bw(void *vbw) a_Bw_stop_clients(bw, BW_Root + BW_Img + BW_Force); delete(layout); if (ui->tabs()) { - ui->tabs()->remove(ui); - if (ui->tabs()->value()) - ui->tabs()->value()->take_focus(); - else - ui->tabs()->window()->hide(); + ui->tabs()->remove_tab(); } - delete(ui); - a_Bw_free(bw); } @@ -663,11 +517,7 @@ void a_UIcmd_open_url_nw(BrowserWindow *bw, const DilloUrl *url) */ void a_UIcmd_open_url_nt(void *vbw, const DilloUrl *url, int focus) { - BrowserWindow *new_bw = UIcmd_tab_new(vbw); - - if (focus) - BW2UI(new_bw)->tabs()->value(BW2UI(new_bw)); - + BrowserWindow *new_bw = UIcmd_tab_new(vbw, focus); UIcmd_open_url_nbw(new_bw, url); } @@ -1234,7 +1084,7 @@ void a_UIcmd_set_page_title(BrowserWindow *bw, const char *label) const int size = 128; char title[size]; - if (a_UIcmd_get_bw_by_widget(BW2UI(bw)->tabs()->value()) == bw) { + if (a_UIcmd_get_bw_by_widget(BW2UI(bw)->tabs()->wizard()->value()) == bw) { // This is the focused bw, set window title if (snprintf(title, size, "Dillo: %s", label) >= size) { uint_t i = MIN(size - 4, 1 + a_Utf8_end_of_char(title, size - 8)); -- cgit v1.2.3 From a472472ab9d6e5bead93f6adc754a33ef4c3ccb7 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Wed, 9 Mar 2011 14:22:32 -0300 Subject: Part of the UI wasn't visible. This minor changes fix it. --- src/ui.cc | 16 ++++++++-------- src/uicmd.cc | 25 ++++++++++++++++++++----- 2 files changed, 28 insertions(+), 13 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/ui.cc b/src/ui.cc index 72b9b42e..2de27fc9 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -644,8 +644,8 @@ void UI::make_status_panel(int ww) /* * User Interface constructor */ -UI::UI(int x, int y, int ww, int wh, const char* label, const UI *cur_ui) : - Fl_Pack(x, y, ww, wh, label) +UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : + Fl_Pack(x, y, ui_w, ui_h, label) { PointerOnLink = FALSE; @@ -676,11 +676,12 @@ UI::UI(int x, int y, int ww, int wh, const char* label, const UI *cur_ui) : // Control panel TopGroup->begin(); - make_panel(ww); + make_panel(ui_w); // Render area - int mh = wh - (lh+bh+sh); + int mh = ui_h - (lh+bh+sh); Main = new Fl_Group(0,0,0,mh,"Welcome..."); + Main->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE); Main->box(FL_FLAT_BOX); Main->color(FL_GRAY_RAMP + 3); Main->labelfont(FL_HELVETICA_BOLD_ITALIC); @@ -691,11 +692,11 @@ UI::UI(int x, int y, int ww, int wh, const char* label, const UI *cur_ui) : MainIdx = TopGroup->find(Main); // Find text bar - findbar = new Findbar(ww, 28); + findbar = new Findbar(ui_w, 28); //TopGroup->add(findbar); // Status Panel - make_status_panel(ww); + make_status_panel(ui_w); //TopGroup->add(StatusPanel); TopGroup->end(); @@ -1058,14 +1059,13 @@ void UI::panelmode_cb_i() */ void UI::set_render_layout(Fl_Group &nw) { - // We'll use a workaround in a_UIcmd_browser_window_new() instead. TopGroup->remove(MainIdx); delete(Main); TopGroup->insert(nw, MainIdx); Main = &nw; + TopGroup->resizable(Main); //TopGroup->box(FL_DOWN_BOX); //TopGroup->box(FL_BORDER_FRAME); - TopGroup->resizable(TopGroup->child(MainIdx)); } /* diff --git a/src/uicmd.cc b/src/uicmd.cc index 74cfbb7b..7635e306 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -21,6 +21,7 @@ #include #include #include +#include #include "paths.hh" #include "keys.hh" @@ -55,6 +56,7 @@ using namespace dw::fltk; * Local data */ static char *save_dir = NULL; +static UI *Gui; //---------------------------------------------------------------------------- @@ -95,7 +97,10 @@ public: Wizard = new Fl_Wizard(0,tab_h,ww,wh-tab_h); Wizard->end(); - add_new_tab(1); + Gui = add_new_tab(1); + printf("Wizard window: %p\n", Wizard->window()); + //printf("Gui visible: %d\n", Gui->visible()); + //printf("Gui visible_r: %d\n", Gui->visible_r()); }; int handle(int e); UI *add_new_tab(int focus); @@ -150,6 +155,7 @@ UI *CustTabs::add_new_tab(int focus) UI *new_ui = new UI(0,tab_h,Wizard->w(),Wizard->h()); new_ui->tabs(this); Wizard->add(new_ui); + new_ui->show(); int ntabs = children(); snprintf(tab_label, 64,"ctab%d", ++tab_n); @@ -306,16 +312,21 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, else win = new Fl_Double_Window(ww, wh); - Fl_Group::current(0); + //Fl_Group::current(0); CustTabs *DilloTabs = new CustTabs(ww, wh, 16); DilloTabs->selection_color(156); - win->add(DilloTabs); + //win->add(DilloTabs); +#if 0 // Create and set the UI UI *new_ui = DilloTabs->add_new_tab(1); + //DilloTabs->window()->show(); +#else + UI *new_ui = Gui; + //win->resizable(new_ui); win->resizable(new_ui); win->show(); - //DilloTabs->window()->show(); +#endif if (old_bw == NULL && prefs.xpos >= 0 && prefs.ypos >= 0) { // position the first window according to preferences @@ -349,7 +360,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, win->callback(win_cb, DilloTabs); - new_ui->focus_location(); + //new_ui->focus_location(); return new_bw; } @@ -479,10 +490,12 @@ void a_UIcmd_open_urlstr(void *vbw, const char *urlstr) */ void a_UIcmd_open_url(BrowserWindow *bw, const DilloUrl *url) { +#if 0 a_Nav_push(bw, url, NULL); if (BW2UI(bw)->get_panelmode() == UI_TEMPORARILY_SHOW_PANELS) BW2UI(bw)->set_panelmode(UI_HIDDEN); a_UIcmd_focus_main_area(bw); +#endif } static void UIcmd_open_url_nbw(BrowserWindow *new_bw, const DilloUrl *url) @@ -1117,6 +1130,7 @@ void a_UIcmd_set_msg(BrowserWindow *bw, const char *format, ...) */ void a_UIcmd_set_buttons_sens(BrowserWindow *bw) { +#if 0 int sens; // Stop @@ -1129,6 +1143,7 @@ void a_UIcmd_set_buttons_sens(BrowserWindow *bw) sens = (a_Nav_stack_ptr(bw) < a_Nav_stack_size(bw) - 1 && !bw->nav_expecting); BW2UI(bw)->button_set_sens(UI_FORW, sens); +#endif } /* -- cgit v1.2.3 From 33658b04af7478669b23c07ac699693e30c83df8 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Wed, 9 Mar 2011 14:24:10 -0300 Subject: Added code and made the necesary bindings so tabs start to be functional --- src/ui.cc | 42 +++-------------- src/ui.hh | 1 - src/uicmd.cc | 150 +++++++++++++++++++++++++++++------------------------------ 3 files changed, 81 insertions(+), 112 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/ui.cc b/src/ui.cc index 2de27fc9..b28c95cd 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -98,6 +98,7 @@ public: */ int CustInput::handle(int e) { +#if 0 int k = Fl::event_key(); _MSG("CustInput::handle event=%d\n", e); @@ -126,7 +127,7 @@ int CustInput::handle(int e) } } _MSG("\n"); - +#endif return Fl_Input::handle(e); } @@ -599,8 +600,8 @@ void UI::make_panel(int ww) NavBar = new CustGroup(0,0,ww,bh); NavBar->begin(); make_toolbar(ww,bh); - w = new Fl_Box(p_xpos,0,ww-p_xpos-2*pw,bh,"i n v i s i b l e"); - w->box(FL_THIN_UP_BOX); + w = new Fl_Box(p_xpos,0,ww-p_xpos-2*pw,bh); + w->box(FL_NO_BOX); NavBar->resizable(w); p_xpos = ww - 2*pw; if (PanelSize == P_small) { @@ -734,7 +735,7 @@ int UI::handle(int event) _MSG("Panel->h()=%d Main->h()=%d\n", Panel->h() , Main->h()); int ret = 0; - +#if 0 if (event == FL_KEYBOARD) { return 0; // Receive as shortcut } else if (event == FL_SHORTCUT) { @@ -819,7 +820,7 @@ int UI::handle(int event) } } } - +#endif if (!ret) { ret = Fl_Group::handle(event); } @@ -1068,37 +1069,6 @@ void UI::set_render_layout(Fl_Group &nw) //TopGroup->box(FL_BORDER_FRAME); } -/* - * Set the tab title - */ -void UI::set_tab_title(const char *label) -{ - char title[128]; - - dReturn_if_fail(label != NULL); - - if (*label) { - // Make a label for this tab - size_t tab_chars = 18, label_len = strlen(label); - - if (label_len > tab_chars) - tab_chars = a_Utf8_end_of_char(label, tab_chars - 1) + 1; - snprintf(title, tab_chars + 1, "%s", label); - if (label_len > tab_chars) - snprintf(title + tab_chars, 4, "..."); - // Avoid unnecessary redraws - if (strcmp(this->label(), title)) { - this->copy_label(title); - this->redraw_label(); - } - - // Disabled because of a bug in fltk::Tabgroup - //dFree(TabTooltip); - //TabTooltip = dStrdup(label); - //this->tooltip(TabTooltip); - } -} - /* * Set button sensitivity (Back/Forw/Stop) */ diff --git a/src/ui.hh b/src/ui.hh index 9c50b653..363ff9a6 100644 --- a/src/ui.hh +++ b/src/ui.hh @@ -163,7 +163,6 @@ public: void set_img_prog(int n_img, int t_img, int cmd); void set_bug_prog(int n_bug); void set_render_layout(Fl_Group &nw); - void set_tab_title(const char *label); void customize(int flags); void button_set_sens(UIButton btn, int sens); void paste_url(); diff --git a/src/uicmd.cc b/src/uicmd.cc index 7635e306..3f6e1966 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -58,6 +58,10 @@ using namespace dw::fltk; static char *save_dir = NULL; static UI *Gui; +/* + * Forward declarations + */ +static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus); //---------------------------------------------------------------------------- @@ -97,7 +101,6 @@ public: Wizard = new Fl_Wizard(0,tab_h,ww,wh-tab_h); Wizard->end(); - Gui = add_new_tab(1); printf("Wizard window: %p\n", Wizard->window()); //printf("Gui visible: %d\n", Gui->visible()); //printf("Gui visible_r: %d\n", Gui->visible_r()); @@ -107,11 +110,27 @@ public: void remove_tab(); Fl_Wizard *wizard(void) { return Wizard; } int get_btn_idx(UI *ui); + int num_tabs() { return (children() - 1); } // substract invisible box void switch_tab(CustTabButton *cbtn); void prev_tab(void); void next_tab(void); + + void set_tab_label(UI *ui, const char *title); }; +/* + * Callback for mouse click + */ +static void tab_btn_cb (Fl_Widget *w, void *cb_data) +{ + CustTabButton *btn = (CustTabButton*) w; + CustTabs *tabs = (CustTabs*) cb_data; + int b = Fl::event_button(); + + if (b == FL_LEFT_MOUSE) + tabs->switch_tab(btn); +} + int CustTabs::handle(int e) { int ret = 0; @@ -134,7 +153,7 @@ int CustTabs::handle(int e) //toggle_cb(NULL, Wizard->value()); ret = 1; } else if (k == 't') { - add_new_tab(1); + UIcmd_tab_new(this, 1); } else if (k == 'q') { remove_tab(); } @@ -157,9 +176,9 @@ UI *CustTabs::add_new_tab(int focus) Wizard->add(new_ui); new_ui->show(); - int ntabs = children(); snprintf(tab_label, 64,"ctab%d", ++tab_n); - CustTabButton *btn = new CustTabButton((ntabs-1)*tab_w,0,tab_w,tab_h); + CustTabButton *btn = new CustTabButton(num_tabs()*tab_w,0,tab_w,tab_h); + btn->align(FL_ALIGN_INSIDE|FL_ALIGN_CLIP); btn->copy_label(tab_label); btn->clear_visible_focus(); btn->box(FL_PLASTIC_ROUND_UP_BOX); @@ -167,7 +186,7 @@ UI *CustTabs::add_new_tab(int focus) btn->ui(new_ui); add(btn); btn->redraw(); - //btn->callback(tab_btn_cb, this); + btn->callback(tab_btn_cb, this); if (focus) switch_tab(btn); @@ -181,10 +200,6 @@ void CustTabs::remove_tab() CustTabButton *btn; UI *ui = (UI*)Wizard->value(); - // the invisible box is also a child - if (children() == 2) - exit(0); - // remove label button int idx = get_btn_idx(ui); btn = (CustTabButton*)child(idx); @@ -196,11 +211,17 @@ void CustTabs::remove_tab() Wizard->remove(ui); delete(ui); + + if (num_tabs() == 0) { + window()->hide(); + // TODO: free memory + //delete window(); + } } int CustTabs::get_btn_idx(UI *ui) { - for (int i = children()-1; i; --i) { + for (int i = 1; i <= num_tabs(); ++i) { CustTabButton *btn = (CustTabButton*)child(i); if (btn->ui() == ui) return i; @@ -239,11 +260,35 @@ void CustTabs::next_tab() { int idx; - if ((idx = get_btn_idx((UI*)Wizard->value())) > 0 && idx+1 < children()) + if ((idx = get_btn_idx((UI*)Wizard->value())) > 0 && idx < num_tabs()) switch_tab( (CustTabButton*)child(idx+1) ); } - +/* + * Set this UI's tab button label + */ +void CustTabs::set_tab_label(UI *ui, const char *label) +{ + char title[128]; + int idx = get_btn_idx(ui); + + if (idx > 0) { + // Make a label for this tab + size_t tab_chars = 7, label_len = strlen(label); + + if (label_len > tab_chars) + tab_chars = a_Utf8_end_of_char(label, tab_chars - 1) + 1; + snprintf(title, tab_chars + 1, "%s", label); + if (label_len > tab_chars) + snprintf(title + tab_chars, 4, "..."); + + // Avoid unnecessary redraws + if (strcmp(child(idx)->label(), title)) { + child(idx)->copy_label(title); + child(idx)->redraw_label(); + } + } +} //---------------------------------------------------------------------------- @@ -252,12 +297,12 @@ static void win_cb (Fl_Widget *w, void *cb_data) { int choice = 1; CustTabs *tabs = (CustTabs*) cb_data; - if (tabs->children () > 1) + if (tabs->num_tabs() > 1) choice = a_Dialog_choice5("Window contains more than one tab.", "Close all tabs", "Cancel", NULL, NULL, NULL); if (choice == 1) - while (tabs->children()) - a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(tabs->child(0))); + while (tabs->num_tabs()) + a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(tabs->wizard()->value())); } /* @@ -314,50 +359,17 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, //Fl_Group::current(0); CustTabs *DilloTabs = new CustTabs(ww, wh, 16); - DilloTabs->selection_color(156); - //win->add(DilloTabs); + win->end(); -#if 0 - // Create and set the UI - UI *new_ui = DilloTabs->add_new_tab(1); - //DilloTabs->window()->show(); -#else - UI *new_ui = Gui; - //win->resizable(new_ui); - win->resizable(new_ui); + new_bw = UIcmd_tab_new(DilloTabs, 1); + win->resizable(Gui); win->show(); -#endif if (old_bw == NULL && prefs.xpos >= 0 && prefs.ypos >= 0) { // position the first window according to preferences DilloTabs->window()->position(prefs.xpos, prefs.ypos); } - // Now create the Dw render layout and viewport - FltkPlatform *platform = new FltkPlatform (); - Layout *layout = new Layout (platform); - style::Color *bgColor = style::Color::create (layout, prefs.bg_color); - layout->setBgColor (bgColor); - - FltkViewport *viewport = new FltkViewport (0, 0, 1, 1); - if (prefs.buffered_drawing == 1) - viewport->setBufferedDrawing (true); - else - viewport->setBufferedDrawing (false); - - layout->attachView (viewport); - new_ui->set_render_layout(*viewport); - - viewport->setScrollStep((int) rint(14.0 * prefs.font_factor)); - - // Now, create a new browser window structure - new_bw = a_Bw_new(); - - // 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, DilloTabs); //new_ui->focus_location(); @@ -366,26 +378,16 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, } /* - * Create a new Tab. - * i.e the new UI and its associated BrowserWindow data structure. + * Create a new Tab button, UI and its associated BrowserWindow data + * structure. */ -static BrowserWindow *UIcmd_tab_new(const void *vbw, int focus) +static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus) { - _MSG(" UIcmd_tab_new vbw=%p\n", vbw); - - dReturn_val_if_fail (vbw != NULL, NULL); - - BrowserWindow *new_bw = NULL; - BrowserWindow *old_bw = (BrowserWindow*)vbw; - UI *ui = BW2UI(old_bw); - - // WORKAROUND: limit the number of tabs because of a fltk bug - if (ui->tabs()->children() >= 127) - return a_UIcmd_browser_window_new(ui->window()->w(), ui->window()->h(), - 0, vbw); + MSG(" UIcmd_tab_new\n"); // Create and set the UI - UI *new_ui = ui->tabs()->add_new_tab(focus); + UI *new_ui = tabs->add_new_tab(1); + Gui = new_ui; // Now create the Dw render layout and viewport FltkPlatform *platform = new FltkPlatform (); @@ -394,14 +396,13 @@ static BrowserWindow *UIcmd_tab_new(const void *vbw, int focus) layout->setBgColor (bgColor); FltkViewport *viewport = new FltkViewport (0, 0, 1, 1); - + viewport->setBufferedDrawing (prefs.buffered_drawing ? true : false); layout->attachView (viewport); new_ui->set_render_layout(*viewport); - viewport->setScrollStep((int) rint(14.0 * prefs.font_factor)); // Now, create a new browser window structure - new_bw = a_Bw_new(); + BrowserWindow *new_bw = a_Bw_new(); // Reference the UI from the bw new_bw->ui = (void *)new_ui; @@ -490,8 +491,8 @@ void a_UIcmd_open_urlstr(void *vbw, const char *urlstr) */ void a_UIcmd_open_url(BrowserWindow *bw, const DilloUrl *url) { -#if 0 a_Nav_push(bw, url, NULL); +#if 0 if (BW2UI(bw)->get_panelmode() == UI_TEMPORARILY_SHOW_PANELS) BW2UI(bw)->set_panelmode(UI_HIDDEN); a_UIcmd_focus_main_area(bw); @@ -530,7 +531,8 @@ void a_UIcmd_open_url_nw(BrowserWindow *bw, const DilloUrl *url) */ void a_UIcmd_open_url_nt(void *vbw, const DilloUrl *url, int focus) { - BrowserWindow *new_bw = UIcmd_tab_new(vbw, focus); + BrowserWindow *bw = (BrowserWindow *)vbw; + BrowserWindow *new_bw = UIcmd_tab_new(BW2UI(bw)->tabs(), focus); UIcmd_open_url_nbw(new_bw, url); } @@ -1106,7 +1108,7 @@ void a_UIcmd_set_page_title(BrowserWindow *bw, const char *label) BW2UI(bw)->window()->copy_label(title); BW2UI(bw)->window()->redraw_label(); } - BW2UI(bw)->set_tab_title(label); + BW2UI(bw)->tabs()->set_tab_label(BW2UI(bw), label); } /* @@ -1130,7 +1132,6 @@ void a_UIcmd_set_msg(BrowserWindow *bw, const char *format, ...) */ void a_UIcmd_set_buttons_sens(BrowserWindow *bw) { -#if 0 int sens; // Stop @@ -1143,7 +1144,6 @@ void a_UIcmd_set_buttons_sens(BrowserWindow *bw) sens = (a_Nav_stack_ptr(bw) < a_Nav_stack_size(bw) - 1 && !bw->nav_expecting); BW2UI(bw)->button_set_sens(UI_FORW, sens); -#endif } /* -- cgit v1.2.3 From 2dec0150336e6b9cc19e0230697fe952115d6ef3 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Wed, 9 Mar 2011 14:25:32 -0300 Subject: Moved some keyboard events from class UI to class CustTabs (where they belong) --- src/ui.cc | 5 +++-- src/uicmd.cc | 44 +++++++++++++++++++++++++++++++++----------- 2 files changed, 36 insertions(+), 13 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/ui.cc b/src/ui.cc index b28c95cd..2dc16ead 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -98,18 +98,19 @@ public: */ int CustInput::handle(int e) { -#if 0 int k = Fl::event_key(); _MSG("CustInput::handle event=%d\n", e); // We're only interested in some flags - unsigned modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); + //unsigned modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); // Don't focus with arrow keys if (e == FL_FOCUS && (k == FL_Up || k == FL_Down || k == FL_Left || k == FL_Right)) { return 0; + } +#if 0 } else if (e == FL_KEYBOARD) { if (modifier == FL_CTRL) { if (k == 'l') { diff --git a/src/uicmd.cc b/src/uicmd.cc index 3f6e1966..d7e7723d 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -136,7 +136,38 @@ int CustTabs::handle(int e) int ret = 0; //printf("CustTabs::handle e=%s\n", fl_eventnames[e]); - if (e == FL_KEYUP) { + if (e == FL_KEYBOARD) { + return 0; // Receive as shortcut + } else if (e == FL_SHORTCUT) { + UI *ui = (UI*)wizard()->value(); + BrowserWindow *bw = a_UIcmd_get_bw_by_widget(ui); + KeysCommand_t cmd = Keys::getKeyCmd(); + if (cmd == KEYS_NOP) { + // Do nothing + } else if (cmd == KEYS_NEW_TAB) { + a_UIcmd_open_url_nt(bw, NULL, 1); + ret = 1; + } else if (cmd == KEYS_CLOSE_TAB) { + a_UIcmd_close_bw(bw); + ret = 1; + } else if (cmd == KEYS_LEFT_TAB) { + printf("CustTabs::handle KEYS_LEFT_TAB\n"); + ret = 1; + } else if (cmd == KEYS_RIGHT_TAB) { + printf("CustTabs::handle KEYS_RIGHT_TAB\n"); + ret = 1; + } else if (cmd == KEYS_NEW_WINDOW) { + a_UIcmd_browser_window_new(ui->w(),ui->h()+this->h(),0,bw); + ret = 1; + } else if (cmd == KEYS_FULLSCREEN) { + printf("CustTabs::handle KEYS_FULLSCREEN\n"); + ret = 1; + } else if (cmd == KEYS_CLOSE_ALL) { + a_Timeout_add(0.0, a_UIcmd_close_all_bw, NULL); + ret = 1; + } + + } else if (e == FL_KEYUP) { int k = Fl::event_key(); // We're only interested in some flags unsigned modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); @@ -147,16 +178,6 @@ int CustTabs::handle(int e) (k == FL_Left) ? prev_tab() : next_tab(); ret = 1; } - } else if (modifier == FL_CTRL) { - if (k == ' ') { - //printf("CustTabs::handle FL_CTRL + Space\n"); - //toggle_cb(NULL, Wizard->value()); - ret = 1; - } else if (k == 't') { - UIcmd_tab_new(this, 1); - } else if (k == 'q') { - remove_tab(); - } } } @@ -423,6 +444,7 @@ void a_UIcmd_close_bw(void *vbw) MSG("a_UIcmd_close_bw\n"); a_Bw_stop_clients(bw, BW_Root + BW_Img + BW_Force); + //TODO: sometimes this call segfaults upon exit delete(layout); if (ui->tabs()) { ui->tabs()->remove_tab(); -- cgit v1.2.3 From b540f44f385ea69ed0b6467ec84ae08d260d233f Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Wed, 9 Mar 2011 14:26:19 -0300 Subject: Made remove_tab() work for non-focused tabs --- src/uicmd.cc | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index d7e7723d..7a8c3ccd 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -93,7 +93,6 @@ public: CustGroup(0,0,ww,th,lbl) { tab_w = 80, tab_h = th, tab_n = 0, curtab_idx = -1; tabcolor_active = FL_DARK_CYAN; tabcolor_inactive = 206; - //Fl_Box *w = new Fl_Box(tab_w,0,ww-tab_w,tab_h,"i n v i s i b l e"); Fl_Box *w = new Fl_Box(0,0,0,0,"i n v i s i b l e"); w->box(FL_NO_BOX); resizable(0); @@ -101,13 +100,10 @@ public: Wizard = new Fl_Wizard(0,tab_h,ww,wh-tab_h); Wizard->end(); - printf("Wizard window: %p\n", Wizard->window()); - //printf("Gui visible: %d\n", Gui->visible()); - //printf("Gui visible_r: %d\n", Gui->visible_r()); }; int handle(int e); UI *add_new_tab(int focus); - void remove_tab(); + void remove_tab(UI *ui); Fl_Wizard *wizard(void) { return Wizard; } int get_btn_idx(UI *ui); int num_tabs() { return (children() - 1); } // substract invisible box @@ -127,15 +123,19 @@ static void tab_btn_cb (Fl_Widget *w, void *cb_data) CustTabs *tabs = (CustTabs*) cb_data; int b = Fl::event_button(); - if (b == FL_LEFT_MOUSE) + if (b == FL_LEFT_MOUSE) { tabs->switch_tab(btn); + } else if (b == FL_RIGHT_MOUSE) { + // TODO: just an example, not necessarily final + a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(btn->ui())); + } } int CustTabs::handle(int e) { int ret = 0; - //printf("CustTabs::handle e=%s\n", fl_eventnames[e]); + _MSG("CustTabs::handle e=%s\n", fl_eventnames[e]); if (e == FL_KEYBOARD) { return 0; // Receive as shortcut } else if (e == FL_SHORTCUT) { @@ -151,16 +151,16 @@ int CustTabs::handle(int e) a_UIcmd_close_bw(bw); ret = 1; } else if (cmd == KEYS_LEFT_TAB) { - printf("CustTabs::handle KEYS_LEFT_TAB\n"); + MSG("CustTabs::handle KEYS_LEFT_TAB\n"); ret = 1; } else if (cmd == KEYS_RIGHT_TAB) { - printf("CustTabs::handle KEYS_RIGHT_TAB\n"); + MSG("CustTabs::handle KEYS_RIGHT_TAB\n"); ret = 1; } else if (cmd == KEYS_NEW_WINDOW) { a_UIcmd_browser_window_new(ui->w(),ui->h()+this->h(),0,bw); ret = 1; } else if (cmd == KEYS_FULLSCREEN) { - printf("CustTabs::handle KEYS_FULLSCREEN\n"); + MSG("CustTabs::handle KEYS_FULLSCREEN\n"); ret = 1; } else if (cmd == KEYS_CLOSE_ALL) { a_Timeout_add(0.0, a_UIcmd_close_all_bw, NULL); @@ -216,10 +216,12 @@ UI *CustTabs::add_new_tab(int focus) return new_ui; } -void CustTabs::remove_tab() +/* + * Remove tab by UI + */ +void CustTabs::remove_tab(UI *ui) { CustTabButton *btn; - UI *ui = (UI*)Wizard->value(); // remove label button int idx = get_btn_idx(ui); @@ -228,6 +230,7 @@ void CustTabs::remove_tab() remove(idx); delete btn; rearrange(); + //TODO: redraw doesn't work sometimes redraw(); Wizard->remove(ui); @@ -334,8 +337,9 @@ 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 (((Fl_Widget*)bw->ui)->contains((Fl_Widget*)v_wid)) + if (((UI*)bw->ui)->contains((Fl_Widget*)v_wid)) { return bw; + } } return NULL; } @@ -447,7 +451,7 @@ void a_UIcmd_close_bw(void *vbw) //TODO: sometimes this call segfaults upon exit delete(layout); if (ui->tabs()) { - ui->tabs()->remove_tab(); + ui->tabs()->remove_tab(ui); } a_Bw_free(bw); } -- cgit v1.2.3 From 1c24e3a90ca78e0f797b4c974153d97443756063 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Sun, 13 Mar 2011 09:50:30 -0400 Subject: Made the status bar visible and operative. The Bug Meter needs some work due to differences with FLTK2 --- dw/fltkviewport.cc | 3 ++- src/ui.cc | 76 ++++++++++++++++++++++++++++-------------------------- src/ui.hh | 4 +-- src/uicmd.cc | 5 ++-- 4 files changed, 47 insertions(+), 41 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkviewport.cc b/dw/fltkviewport.cc index d0080a05..ee919b29 100644 --- a/dw/fltkviewport.cc +++ b/dw/fltkviewport.cc @@ -180,7 +180,8 @@ void FltkViewport::draw () if (d & FL_DAMAGE_SCROLL) { clear_damage (FL_DAMAGE_SCROLL); - fl_scroll(x(), y(), w () - hdiff, h () - vdiff, -scrollDX, -scrollDY, draw_area, this); + fl_scroll(x(), y(), w() - hdiff, h() - vdiff, + -scrollDX, -scrollDY, draw_area, this); clear_damage (d & ~FL_DAMAGE_SCROLL); } diff --git a/src/ui.cc b/src/ui.cc index 09eb0787..f13ca982 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -561,7 +561,7 @@ void UI::make_panel(int ww) else bw = 45, bh = 45, fh = 24, lh = 28, lbl = 1; } - nh = bh, sh = 24; + nh = bh, sh = 20; if (PanelSize == P_tiny) { NavBar = new CustGroup(0,0,ww,bh); @@ -618,30 +618,33 @@ void UI::make_panel(int ww) /* * Create the status panel */ -void UI::make_status_panel(int ww) +void UI::make_status_panel(int ww, int wh) { - const int s_h = 20, bm_w = 16; - // HACK: we need a defined StatusOutput - StatusPanel = new Fl_Group(0, 400, 1, 1, 0); - StatusPanel->end(); + const int bm_w = 20; + StatusPanel = new CustGroup(0, wh-sh, ww, sh); + + // Status box + StatusOutput = new Fl_Output(0, wh-sh, ww-bm_w, sh); + StatusOutput->value("hola!"); + StatusOutput->labelsize(8); + StatusOutput->box(FL_THIN_DOWN_BOX); + StatusOutput->clear_visible_focus(); + StatusOutput->color(FL_GRAY_RAMP + 18); + //StatusOutput->throw_focus(); + + // Bug Meter + // TODO: fltk1.3 places label on top or bottom (no left right) + BugMeter = new Fl_Button(ww-bm_w,wh-sh,bm_w,sh); + BugMeter->image(icons->ImgMeterOK); + BugMeter->box(FL_THIN_UP_BOX); + BugMeter->align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT); + if (prefs.show_tooltip) + BugMeter->tooltip("Show HTML bugs\n(right-click for menu)"); + BugMeter->callback(bugmeter_cb, this); + BugMeter->clear_visible_focus(); - // Status box - StatusOutput = new Fl_Output(0, 0, ww-bm_w, s_h, 0); - StatusOutput->value(""); - StatusOutput->box(FL_THIN_DOWN_BOX); - StatusOutput->clear_visible_focus(); - StatusOutput->color(FL_GRAY_RAMP + 18); - //StatusOutput->throw_focus(); - - // Bug Meter - BugMeter = new Fl_Button(ww-bm_w,0,bm_w,s_h,0); - BugMeter->image(icons->ImgMeterOK); - BugMeter->box(FL_THIN_DOWN_BOX); - BugMeter->align(FL_ALIGN_INSIDE|FL_ALIGN_CLIP|FL_ALIGN_LEFT); - if (prefs.show_tooltip) - BugMeter->tooltip("Show HTML bugs\n(right-click for menu)"); - BugMeter->callback(bugmeter_cb, this); - BugMeter->clear_visible_focus(); + StatusPanel->end(); + StatusPanel->resizable(StatusOutput); } /* @@ -684,6 +687,7 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : // Render area int mh = ui_h - (lh+bh+sh); Main = new Fl_Group(0,0,0,mh,"Welcome..."); + Main->end(); Main->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE); Main->box(FL_FLAT_BOX); Main->color(FL_GRAY_RAMP + 3); @@ -695,12 +699,11 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : MainIdx = TopGroup->find(Main); // Find text bar - findbar = new Findbar(ui_w, 28); + //findbar = new Findbar(ui_w, 28); //TopGroup->add(findbar); // Status Panel - make_status_panel(ui_w); - //TopGroup->add(StatusPanel); + make_status_panel(ui_w, ui_h); TopGroup->end(); @@ -715,7 +718,7 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : if (Panelmode) { //Panel->hide(); - StatusPanel->hide(); + //StatusPanel->hide(); } } @@ -948,9 +951,9 @@ void UI::set_bug_prog(int n_bug) BugMeter->redraw_label(); new_w = strlen(str)*8 + 20; } - StatusOutput->resize(0,0,StatusPanel->w()-new_w,StatusOutput->h()); - BugMeter->resize(StatusPanel->w()-new_w, 0, new_w, BugMeter->h()); - StatusPanel->init_sizes(); +// StatusOutput->resize(0,0,StatusPanel->w()-new_w,StatusOutput->h()); +// BugMeter->resize(StatusPanel->w()-new_w, 0, new_w, BugMeter->h()); +// StatusPanel->init_sizes(); } /* @@ -1060,15 +1063,16 @@ void UI::panelmode_cb_i() /* * Set 'nw' as the main render area widget */ -void UI::set_render_layout(Fl_Group &nw) +void UI::set_render_layout(Fl_Group *nw) { - TopGroup->remove(MainIdx); + // Resize layout widget to current height + nw->resize(0,0,0,Main->h()); + + TopGroup->insert(*nw, Main); + remove(Main); delete(Main); - TopGroup->insert(nw, MainIdx); - Main = &nw; + Main = nw; TopGroup->resizable(Main); - //TopGroup->box(FL_DOWN_BOX); - //TopGroup->box(FL_BORDER_FRAME); } /* diff --git a/src/ui.hh b/src/ui.hh index 363ff9a6..74f62d75 100644 --- a/src/ui.hh +++ b/src/ui.hh @@ -144,7 +144,7 @@ class UI : public Fl_Pack { void make_menubar(int x, int y, int w, int h); Fl_Widget *make_filemenu_button(); void make_panel(int ww); - void make_status_panel(int ww); + void make_status_panel(int ww, int wh); public: @@ -162,7 +162,7 @@ public: void set_page_prog(size_t nbytes, int cmd); void set_img_prog(int n_img, int t_img, int cmd); void set_bug_prog(int n_bug); - void set_render_layout(Fl_Group &nw); + void set_render_layout(Fl_Group *nw); void customize(int flags); void button_set_sens(UIButton btn, int sens); void paste_url(); diff --git a/src/uicmd.cc b/src/uicmd.cc index 7a8c3ccd..08f9f70b 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -420,10 +420,11 @@ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus) style::Color *bgColor = style::Color::create (layout, prefs.bg_color); layout->setBgColor (bgColor); - FltkViewport *viewport = new FltkViewport (0, 0, 1, 1); + // set_render_layout() sets the proper viewport size + FltkViewport *viewport = new FltkViewport (0, 0, 0, 1); viewport->setBufferedDrawing (prefs.buffered_drawing ? true : false); layout->attachView (viewport); - new_ui->set_render_layout(*viewport); + new_ui->set_render_layout(viewport); viewport->setScrollStep((int) rint(14.0 * prefs.font_factor)); // Now, create a new browser window structure -- cgit v1.2.3 From a39c454217025d86a3ee9ae42895adbe6bf249be Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Tue, 15 Mar 2011 09:28:45 -0300 Subject: Made the findbar operative again (it has tricks and workarounds) --- src/findbar.cc | 23 +++++++++++++++++------ src/menu.cc | 2 +- src/ui.cc | 52 ++++++++++++++++++++++++++++++++++++---------------- src/ui.hh | 6 +++--- src/uicmd.cc | 17 ++++++++++++++++- src/uicmd.hh | 1 + 6 files changed, 74 insertions(+), 27 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/findbar.cc b/src/findbar.cc index 2bda5452..cb0b345b 100644 --- a/src/findbar.cc +++ b/src/findbar.cc @@ -99,14 +99,13 @@ Findbar::Findbar(int width, int height) : int gap = 2; int border = 2; int input_width = width - (2 * border + 4 * (button_width + gap)); - int x = border; + int x = 0; Fl_Group::current(0); height -= 2 * border; - box(FL_PLASTIC_UP_BOX); - Fl_Group::hide(); + box(FL_THIN_UP_BOX); hide_btn = new Fl_Button(x, border, 16, height, 0); hideImg = new Fl_Pixmap(new_s_xpm); @@ -114,6 +113,7 @@ Findbar::Findbar(int width, int height) : x += 16 + gap; hide_btn->callback(hide_cb, this); hide_btn->clear_visible_focus(); + hide_btn->box(FL_THIN_UP_BOX); add(hide_btn); i = new MyInput(x, border, input_width, height); @@ -128,6 +128,7 @@ Findbar::Findbar(int width, int height) : next_btn->shortcut(FL_Enter); next_btn->callback(search_cb, this); next_btn->clear_visible_focus(); + next_btn->box(FL_THIN_UP_BOX); add(next_btn); prev_btn= new Fl_Button(x, border, button_width, height, "Previous"); @@ -135,6 +136,7 @@ Findbar::Findbar(int width, int height) : prev_btn->shortcut(FL_SHIFT+FL_Enter); prev_btn->callback(searchBackwards_cb, this); prev_btn->clear_visible_focus(); + prev_btn->box(FL_THIN_UP_BOX); add(prev_btn); check_btn = new Fl_Check_Button(x, border, 2*button_width, height, @@ -182,7 +184,13 @@ int Findbar::handle(int event) */ void Findbar::show() { + BrowserWindow *bw = a_UIcmd_get_bw_by_widget(this); + dReturn_if (bw == NULL); + + // It takes more than just calling show() to do the trick + //a_UIcmd_findbar_toggle(bw, 1); Fl_Group::show(); + /* select text even if already focused */ i->take_focus(); i->position(i->size(), 0); @@ -193,10 +201,13 @@ void Findbar::show() */ void Findbar::hide() { - BrowserWindow *bw; + BrowserWindow *bw = a_UIcmd_get_bw_by_widget(this); + dReturn_if (bw == NULL); + // It takes more than just calling hide() to do the trick Fl_Group::hide(); - if ((bw = a_UIcmd_get_bw_by_widget(this))) - a_UIcmd_findtext_reset(bw); + a_UIcmd_findbar_toggle(bw, 0); + + a_UIcmd_findtext_reset(bw); a_UIcmd_focus_main_area(bw); } diff --git a/src/menu.cc b/src/menu.cc index 6c5835f8..0918ba51 100644 --- a/src/menu.cc +++ b/src/menu.cc @@ -156,7 +156,7 @@ static void Menu_add_bookmark_cb(Fl_Widget*, void* ) */ static void Menu_find_text_cb(Fl_Widget*, void* ) { - ((UI *)popup_bw->ui)->set_findbar_visibility(1); + ((UI *)popup_bw->ui)->findbar_toggle(1); } /* diff --git a/src/ui.cc b/src/ui.cc index e2de1a40..9026b822 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -110,7 +110,11 @@ int CustInput::handle(int e) (k == FL_Up || k == FL_Down || k == FL_Left || k == FL_Right)) { return 0; } else if (e == FL_KEYBOARD) { - if (modifier == FL_CTRL) { + if (k == FL_Escape && modifier == 0) { + // Let the parent group handle this Esc key + return 0; + + } else if (modifier == FL_CTRL) { if (k == 'l') { // Make text selected when already focused. position(size(), 0); @@ -692,12 +696,13 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : MainIdx = TopGroup->find(Main); // Find text bar - //findbar = new Findbar(ui_w, 28); - //TopGroup->add(findbar); - Fl_Box *fb = new Fl_Box(0,0,0,fh, "F I N D B A R"); + FindBarSpace = 1; + FindBar = new Findbar(ui_w, fh); + TopGroup->add(FindBar); // Status Panel make_status_bar(ui_w, ui_h); + TopGroup->add(StatusBar); TopGroup->end(); @@ -710,10 +715,6 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : customize(0); - // Hide findbar - fb->hide(); - Main->size(Main->w(), Main->h()+fb->h()); - if (Panelmode) { //Panel->hide(); //StatusBar->hide(); @@ -759,8 +760,10 @@ int UI::handle(int event) a_UIcmd_book(a_UIcmd_get_bw_by_widget(this)); ret = 1; } else if (cmd == KEYS_FIND) { - MSG("UI::handle ->KEYS_FIND\n"); - //set_findbar_visibility(1); + if (!FindBarSpace) { + findbar_toggle(1); + } else + FindBar->hide(); ret = 1; } else if (cmd == KEYS_WEBSEARCH) { a_UIcmd_search_dialog(a_UIcmd_get_bw_by_widget(this)); @@ -1094,13 +1097,30 @@ void UI::paste_url() } /* - * Shows or hides the findbar of this window + * Ajust space for the findbar (if necessary) and show or remove it */ -void UI::set_findbar_visibility(bool visible) +void UI::findbar_toggle(bool add) { - if (visible) { - findbar->show(); - } else { - findbar->hide(); + /* WORKAROUND: + * This is tricky: As fltk-1.3 resizes hidden widgets (which it + * doesn't resize when visible!). We need to go through hoops to + * get the desired behaviour. + * Most probably this is a bug in FLTK and we have to report it. + */ + + if (add && !FindBarSpace) { + // show + Main->size(Main->w(), Main->h()-FindBar->h()); + insert(*FindBar, StatusBar); + FindBar->show(); + FindBarSpace = 1; + } else if (!add && FindBarSpace) { + // hide + Main->size(Main->w(), Main->h()+FindBar->h()); + remove(FindBar); + FindBarSpace = 0; } + + // Main->redraw(); is not enough + redraw(); } diff --git a/src/ui.hh b/src/ui.hh index f5225357..c74b2056 100644 --- a/src/ui.hh +++ b/src/ui.hh @@ -127,14 +127,14 @@ class UI : public Fl_Pack { CustProgressBox *PProg, *IProg; Fl_Group *Panel, *Main; Fl_Output *StatusOutput; + Findbar *FindBar; - int MainIdx; + int FindBarSpace, MainIdx; // Panel customization variables int PanelSize, CuteColor, Small_Icons; int p_xpos, p_ypos, bw, bh, mh, lh, nh, fh, sh, pw, lbl; UIPanelmode Panelmode; - Findbar *findbar; int PointerOnLink; Fl_Button *make_button(const char *label, Fl_Image *img, Fl_Image*deimg, int b_n, int start = 0); @@ -168,7 +168,7 @@ public: void paste_url(); void set_panelmode(UIPanelmode mode); UIPanelmode get_panelmode(); - void set_findbar_visibility(bool visible); + void findbar_toggle(bool add); Fl_Widget *fullscreen_button() { return FullScreen; } void fullscreen_toggle() { FullScreen->do_callback(); } diff --git a/src/uicmd.cc b/src/uicmd.cc index 08f9f70b..190b9e7e 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -142,7 +142,11 @@ int CustTabs::handle(int e) UI *ui = (UI*)wizard()->value(); BrowserWindow *bw = a_UIcmd_get_bw_by_widget(ui); KeysCommand_t cmd = Keys::getKeyCmd(); - if (cmd == KEYS_NOP) { + if (Fl::event_key() == FL_Escape) { + // Hide findbar if present + ui->findbar_toggle(0); + ret = 1; + } else if (cmd == KEYS_NOP) { // Do nothing } else if (cmd == KEYS_NEW_TAB) { a_UIcmd_open_url_nt(bw, NULL, 1); @@ -435,6 +439,9 @@ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus) // Copy the layout pointer into the bw data new_bw->render_layout = (void*)layout; + // WORKAROUND: see findbar_toggle() + new_ui->findbar_toggle(0); + return new_bw; } @@ -1230,6 +1237,14 @@ void a_UIcmd_findtext_reset(BrowserWindow *bw) a_UIcmd_set_msg(bw, ""); } +/* + * Tell the UI to hide/show the findbar + */ +void a_UIcmd_findbar_toggle(BrowserWindow *bw, int on) +{ + BW2UI(bw)->findbar_toggle(on); +} + /* * Focus the rendered area. */ diff --git a/src/uicmd.hh b/src/uicmd.hh index c8fea9e7..65394ff2 100644 --- a/src/uicmd.hh +++ b/src/uicmd.hh @@ -39,6 +39,7 @@ void a_UIcmd_findtext_dialog(BrowserWindow *bw); void a_UIcmd_findtext_search(BrowserWindow *bw,const char *key,int case_sens, int backwards); void a_UIcmd_findtext_reset(BrowserWindow *bw); +void a_UIcmd_findbar_toggle(BrowserWindow *bw, int on); void a_UIcmd_focus_main_area(BrowserWindow *bw); void a_UIcmd_focus_location(void *vbw); void a_UIcmd_page_popup(void *vbw, bool_t has_bugs, void *v_cssUrls); -- cgit v1.2.3 From 9f7e29fb7765c0d3ae9b375e95585f047acc6140 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Thu, 17 Mar 2011 17:26:18 -0300 Subject: Assorted minor changes (see verbose log) * Changed version to 3.0-pre * Made PgUp/PgDn Up/Dn keys shift focus from location to main area * Set http://dillo.org as the status bar first message (was "hola!). * Doubled the mousewheel scrollstep --- configure.in | 2 +- src/ui.cc | 13 ++++++++++--- src/uicmd.cc | 2 +- 3 files changed, 12 insertions(+), 5 deletions(-) (limited to 'src/uicmd.cc') diff --git a/configure.in b/configure.in index e5d0786a..bf419619 100644 --- a/configure.in +++ b/configure.in @@ -1,6 +1,6 @@ dnl Process this file with aclocal, autoconf and automake. -AC_INIT([dillo], [2.2]) +AC_INIT([dillo], [3.0-pre]) dnl Detect the canonical target build environment AC_CANONICAL_TARGET diff --git a/src/ui.cc b/src/ui.cc index 1bd6217c..e4d6fd46 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -124,6 +124,13 @@ int CustInput::handle(int e) // Let these keys get to the UI return 0; } + } else if (modifier == 0) { + if (k == FL_Down || k == FL_Up || + k == FL_Page_Down || k == FL_Page_Up) { + // Give up focus and honor the key + a_UIcmd_focus_main_area(a_UIcmd_get_bw_by_widget(this)); + return 0; + } } } @@ -623,7 +630,7 @@ void UI::make_status_bar(int ww, int wh) // Status box StatusOutput = new Fl_Output(0, wh-sh, ww-bm_w, sh); - StatusOutput->value("hola!"); + StatusOutput->value("http://dillo.org"); StatusOutput->labelsize(8); StatusOutput->box(FL_THIN_DOWN_BOX); StatusOutput->clear_visible_focus(); @@ -1112,13 +1119,13 @@ void UI::findbar_toggle(bool add) insert(*FindBar, StatusBar); FindBar->show(); FindBarSpace = 1; + redraw(); } else if (!add && FindBarSpace) { // hide Main->size(Main->w(), Main->h()+FindBar->h()); remove(FindBar); FindBarSpace = 0; + redraw(); /* Main->redraw(); is not enough */ } - // Main->redraw(); is not enough - redraw(); } diff --git a/src/uicmd.cc b/src/uicmd.cc index 190b9e7e..7a01d069 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -429,7 +429,7 @@ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus) viewport->setBufferedDrawing (prefs.buffered_drawing ? true : false); layout->attachView (viewport); new_ui->set_render_layout(viewport); - viewport->setScrollStep((int) rint(14.0 * prefs.font_factor)); + viewport->setScrollStep((int) rint(28.0 * prefs.font_factor)); // Now, create a new browser window structure BrowserWindow *new_bw = a_Bw_new(); -- cgit v1.2.3 From 8cd5c228b38e9a66665262379ee12cd66ae477fd Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Wed, 30 Mar 2011 16:03:40 -0300 Subject: Fix for redraw problem when closing a non-focused tab (with tabs=2) --- src/uicmd.cc | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 7a01d069..80099b9b 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -231,10 +231,14 @@ void CustTabs::remove_tab(UI *ui) int idx = get_btn_idx(ui); btn = (CustTabButton*)child(idx); idx > 1 ? prev_tab() : next_tab(); + + // WORKAROUND: with two tabs, closing the non-focused one, doesn't + // delete it from screen. This hide() call makes it work. --Jcid + btn->hide(); + remove(idx); delete btn; rearrange(); - //TODO: redraw doesn't work sometimes redraw(); Wizard->remove(ui); @@ -456,7 +460,6 @@ void a_UIcmd_close_bw(void *vbw) MSG("a_UIcmd_close_bw\n"); a_Bw_stop_clients(bw, BW_Root + BW_Img + BW_Force); - //TODO: sometimes this call segfaults upon exit delete(layout); if (ui->tabs()) { ui->tabs()->remove_tab(ui); -- cgit v1.2.3 From b835e19fabe790739f34093c4bc47ef6582a1a90 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Fri, 1 Apr 2011 14:59:23 -0300 Subject: Fixed button sensitivity when starting with an empty page --- src/dillo.cc | 5 ++++- src/menu.cc | 3 +-- src/uicmd.cc | 13 +++++++++---- 3 files changed, 14 insertions(+), 7 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/dillo.cc b/src/dillo.cc index c7a0cbc3..a45ecdd1 100644 --- a/src/dillo.cc +++ b/src/dillo.cc @@ -380,7 +380,10 @@ PORT1.3 if (idx == argc) { /* No URLs/files on cmdline. Send startup screen */ - a_UIcmd_open_url(bw, prefs.start_page); + if (strcmp(URL_STR(prefs.start_page), "about:blank") == 0) + a_UIcmd_open_url(bw, NULL); + else + a_UIcmd_open_url(bw, prefs.start_page); } else { for (int i = idx; i < argc; i++) { DilloUrl *start_url = makeStartUrl(argv[i], local); diff --git a/src/menu.cc b/src/menu.cc index 0918ba51..e44d3672 100644 --- a/src/menu.cc +++ b/src/menu.cc @@ -84,8 +84,7 @@ void CustItem::draw() { static void filemenu_cb(Fl_Widget *wid, void *data) { if (strcmp((char*)data, "nw") == 0) { - UI *ui = (UI*)popup_bw->ui; - a_UIcmd_browser_window_new(ui->w(), ui->h(), 0, popup_bw); + a_UIcmd_open_url_nw(popup_bw, NULL); } else if (strcmp((char*)data, "nt") == 0) { a_UIcmd_open_url_nt(popup_bw, NULL, 1); } else if (strcmp((char*)data, "of") == 0) { diff --git a/src/uicmd.cc b/src/uicmd.cc index 80099b9b..e4b034fe 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -161,7 +161,7 @@ int CustTabs::handle(int e) MSG("CustTabs::handle KEYS_RIGHT_TAB\n"); ret = 1; } else if (cmd == KEYS_NEW_WINDOW) { - a_UIcmd_browser_window_new(ui->w(),ui->h()+this->h(),0,bw); + a_UIcmd_open_url_nw(bw, NULL); ret = 1; } else if (cmd == KEYS_FULLSCREEN) { MSG("CustTabs::handle KEYS_FULLSCREEN\n"); @@ -405,8 +405,6 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, win->callback(win_cb, DilloTabs); - //new_ui->focus_location(); - return new_bw; } @@ -528,7 +526,13 @@ void a_UIcmd_open_urlstr(void *vbw, const char *urlstr) */ void a_UIcmd_open_url(BrowserWindow *bw, const DilloUrl *url) { - a_Nav_push(bw, url, NULL); + if (url) { + a_Nav_push(bw, url, NULL); + } else { + // Used to start a bw with a blank screen + BW2UI(bw)->focus_location(); + a_UIcmd_set_buttons_sens(bw); + } #if 0 if (BW2UI(bw)->get_panelmode() == UI_TEMPORARILY_SHOW_PANELS) BW2UI(bw)->set_panelmode(UI_HIDDEN); @@ -546,6 +550,7 @@ static void UIcmd_open_url_nbw(BrowserWindow *new_bw, const DilloUrl *url) BW2UI(new_bw)->focus_main(); } else { BW2UI(new_bw)->focus_location(); + a_UIcmd_set_buttons_sens(new_bw); } } -- cgit v1.2.3 From 12a3282acf655441d094e15fb817cb99f0be9426 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Thu, 21 Apr 2011 14:02:08 -0300 Subject: Reenabled "focus_new_tab" dillorc pref (also SHIFT-middleclick to revert) --- src/uicmd.cc | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index e4b034fe..5f36b785 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -207,7 +207,7 @@ UI *CustTabs::add_new_tab(int focus) btn->copy_label(tab_label); btn->clear_visible_focus(); btn->box(FL_PLASTIC_ROUND_UP_BOX); - btn->color(tabcolor_active); + btn->color(focus ? tabcolor_active : tabcolor_inactive); btn->ui(new_ui); add(btn); btn->redraw(); @@ -394,7 +394,8 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, CustTabs *DilloTabs = new CustTabs(ww, wh, 16); win->end(); - new_bw = UIcmd_tab_new(DilloTabs, 1); + int focus = 1; + new_bw = UIcmd_tab_new(DilloTabs, focus); win->resizable(Gui); win->show(); @@ -417,7 +418,7 @@ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus) MSG(" UIcmd_tab_new\n"); // Create and set the UI - UI *new_ui = tabs->add_new_tab(1); + UI *new_ui = tabs->add_new_tab(focus); Gui = new_ui; // Now create the Dw render layout and viewport -- cgit v1.2.3 From 15788cf72d831d266f33576fab9fa1c4aea98421 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Fri, 22 Apr 2011 13:23:09 -0300 Subject: Made "new tab" and "new window" follow the style of the requesting UI --- src/uicmd.cc | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 5f36b785..223817a2 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -61,7 +61,7 @@ static UI *Gui; /* * Forward declarations */ -static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus); +static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, UI *old_ui, int focus); //---------------------------------------------------------------------------- @@ -102,7 +102,7 @@ public: Wizard->end(); }; int handle(int e); - UI *add_new_tab(int focus); + UI *add_new_tab(UI *old_ui, int focus); void remove_tab(UI *ui); Fl_Wizard *wizard(void) { return Wizard; } int get_btn_idx(UI *ui); @@ -191,12 +191,12 @@ int CustTabs::handle(int e) /* * Create a new tab with its own UI */ -UI *CustTabs::add_new_tab(int focus) +UI *CustTabs::add_new_tab(UI *old_ui, int focus) { char tab_label[64]; current(0); - UI *new_ui = new UI(0,tab_h,Wizard->w(),Wizard->h()); + UI *new_ui = new UI(0,tab_h,Wizard->w(),Wizard->h(),0,old_ui); new_ui->tabs(this); Wizard->add(new_ui); new_ui->show(); @@ -375,6 +375,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, { BrowserWindow *old_bw = (BrowserWindow*)vbw; BrowserWindow *new_bw = NULL; + UI *old_ui = old_bw ? BW2UI(old_bw) : NULL; Fl_Window *win; if (ww <= 0 || wh <= 0) { @@ -395,7 +396,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, win->end(); int focus = 1; - new_bw = UIcmd_tab_new(DilloTabs, focus); + new_bw = UIcmd_tab_new(DilloTabs, old_ui, focus); win->resizable(Gui); win->show(); @@ -413,12 +414,12 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, * Create a new Tab button, UI and its associated BrowserWindow data * structure. */ -static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, int focus) +static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, UI *old_ui, int focus) { - MSG(" UIcmd_tab_new\n"); + _MSG(" UIcmd_tab_new\n"); // Create and set the UI - UI *new_ui = tabs->add_new_tab(focus); + UI *new_ui = tabs->add_new_tab(old_ui, focus); Gui = new_ui; // Now create the Dw render layout and viewport @@ -575,7 +576,8 @@ void a_UIcmd_open_url_nw(BrowserWindow *bw, const DilloUrl *url) void a_UIcmd_open_url_nt(void *vbw, const DilloUrl *url, int focus) { BrowserWindow *bw = (BrowserWindow *)vbw; - BrowserWindow *new_bw = UIcmd_tab_new(BW2UI(bw)->tabs(), focus); + BrowserWindow *new_bw = UIcmd_tab_new(BW2UI(bw)->tabs(), + bw ? BW2UI(bw) : NULL, focus); UIcmd_open_url_nbw(new_bw, url); } -- cgit v1.2.3 From e608f83c2911039b724d72eec75c69ed190482f5 Mon Sep 17 00:00:00 2001 From: corvid Date: Thu, 28 Apr 2011 19:31:47 +0000 Subject: fltk1's copy_label() calls redraw_label() --- src/ui.cc | 2 -- src/uicmd.cc | 2 -- 2 files changed, 4 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/ui.cc b/src/ui.cc index c66bdb66..966e2ec6 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -209,7 +209,6 @@ public: copy_label(lbl); //measure_label(w,h); //size(w+padding,this->h()); - redraw_label(); } }; @@ -964,7 +963,6 @@ void UI::set_bug_prog(int n_bug) BugMeter->image(icons->ImgMeterBug); snprintf(str, 32, "%d", n_bug); BugMeter->copy_label(str); - BugMeter->redraw_label(); new_w = strlen(str)*9 + 20; } BugMeter->size(new_w, BugMeter->h()); diff --git a/src/uicmd.cc b/src/uicmd.cc index 223817a2..8e73a1e9 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -317,7 +317,6 @@ void CustTabs::set_tab_label(UI *ui, const char *label) // Avoid unnecessary redraws if (strcmp(child(idx)->label(), title)) { child(idx)->copy_label(title); - child(idx)->redraw_label(); } } } @@ -1151,7 +1150,6 @@ void a_UIcmd_set_page_title(BrowserWindow *bw, const char *label) snprintf(title + i, 4, "..."); } BW2UI(bw)->window()->copy_label(title); - BW2UI(bw)->window()->redraw_label(); } BW2UI(bw)->tabs()->set_tab_label(BW2UI(bw), label); } -- cgit v1.2.3 From 1e61bf1c83d638941739be2c786af63851bc4338 Mon Sep 17 00:00:00 2001 From: corvid Date: Fri, 29 Apr 2011 04:11:46 +0000 Subject: less wordy close dialog buttons --- src/uicmd.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 8e73a1e9..c12b7e9d 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -330,7 +330,7 @@ static void win_cb (Fl_Widget *w, void *cb_data) { if (tabs->num_tabs() > 1) choice = a_Dialog_choice5("Window contains more than one tab.", - "Close all tabs", "Cancel", NULL, NULL, NULL); + "Close", "Cancel", NULL, NULL, NULL); if (choice == 1) while (tabs->num_tabs()) a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(tabs->wizard()->value())); @@ -475,8 +475,8 @@ void a_UIcmd_close_all_bw(void *) int choice = 1; if (a_Bw_num() > 1) - choice = a_Dialog_choice5("More than one open tab or Window.", - "Close all tabs and windows", "Cancel", NULL, NULL, NULL); + choice = a_Dialog_choice5("More than one open tab or window.", + "Quit", "Cancel", NULL, NULL, NULL); if (choice == 1) while ((bw = a_Bw_get(0))) a_UIcmd_close_bw((void*)bw); -- cgit v1.2.3 From 9193ddeffbe3ede83193f302cba21b86e6b6c94b Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Fri, 29 Apr 2011 12:30:39 -0300 Subject: Set middle click as default for close tab (+ right_click_closes_tab in dillorc) --- dillorc | 4 ++++ src/prefs.c | 1 + src/prefs.h | 1 + src/prefsparser.cc | 1 + src/uicmd.cc | 3 ++- 5 files changed, 9 insertions(+), 1 deletion(-) (limited to 'src/uicmd.cc') diff --git a/dillorc b/dillorc index fccb7932..56dc9ec5 100644 --- a/dillorc +++ b/dillorc @@ -228,6 +228,10 @@ # If you prefer to open a new Window instead, set it to NO. #middle_click_opens_new_tab=YES +# A mouse's middle click over a tab closes the Tab. +# With mousewheel mouses, right click feels way better (set to YES). +#right_click_closes_tab=NO + # Mouse middle click by default drives drag-scrolling. # To paste an URL into the window instead of scrolling, set it to NO. # Note: You could always paste the URL onto the URL box clear button. diff --git a/src/prefs.c b/src/prefs.c index f968710a..be0882bd 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -70,6 +70,7 @@ void a_Prefs_init(void) prefs.load_stylesheets=TRUE; prefs.middle_click_drags_page = TRUE; prefs.middle_click_opens_new_tab = TRUE; + prefs.right_click_closes_tab = FALSE; prefs.no_proxy = dStrdup(PREFS_NO_PROXY); prefs.panel_size = P_medium; prefs.parse_embedded_css=TRUE; diff --git a/src/prefs.h b/src/prefs.h index 4009925c..4debee89 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -84,6 +84,7 @@ struct _DilloPrefs { char *font_monospace; bool_t enterpress_forces_submit; bool_t middle_click_opens_new_tab; + bool_t right_click_closes_tab; char *search_url; char *save_dir; bool_t show_msg; diff --git a/src/prefsparser.cc b/src/prefsparser.cc index 95f98c16..7d0582cd 100644 --- a/src/prefsparser.cc +++ b/src/prefsparser.cc @@ -81,6 +81,7 @@ int PrefsParser::parseOption(char *name, char *value) PREFS_BOOL }, { "middle_click_opens_new_tab", &prefs.middle_click_opens_new_tab, PREFS_BOOL }, + { "right_click_closes_tab", &prefs.right_click_closes_tab, PREFS_BOOL }, { "no_proxy", &prefs.no_proxy, PREFS_STRING }, { "panel_size", &prefs.panel_size, PREFS_PANEL_SIZE }, { "parse_embedded_css", &prefs.parse_embedded_css, PREFS_BOOL }, diff --git a/src/uicmd.cc b/src/uicmd.cc index c12b7e9d..fd6067e6 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -125,7 +125,8 @@ static void tab_btn_cb (Fl_Widget *w, void *cb_data) if (b == FL_LEFT_MOUSE) { tabs->switch_tab(btn); - } else if (b == FL_RIGHT_MOUSE) { + } else if ((b == FL_RIGHT_MOUSE && prefs.right_click_closes_tab) || + (b == FL_MIDDLE_MOUSE && !prefs.right_click_closes_tab)) { // TODO: just an example, not necessarily final a_UIcmd_close_bw(a_UIcmd_get_bw_by_widget(btn->ui())); } -- cgit v1.2.3 From 0b50246dca460726123406508b59a01a308856ac Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Fri, 13 May 2011 14:14:43 -0400 Subject: Avoid lots of flicker while resizing the window (when "buffered_drawing" is set to 0 or 1) --- dw/fltkviewbase.cc | 1 + src/ui.cc | 1 + src/uicmd.cc | 3 ++- test/dw_anchors_test.cc | 1 + test/dw_border_test.cc | 1 + test/dw_example.cc | 1 + test/dw_find_test.cc | 2 ++ test/dw_images_scaled.cc | 1 + test/dw_images_scaled2.cc | 1 + test/dw_images_simple.cc | 1 + test/dw_links.cc | 1 + test/dw_links2.cc | 3 +++ test/dw_lists.cc | 1 + test/dw_resource_test.cc | 1 + test/dw_table.cc | 1 + test/dw_table_aligned.cc | 1 + test/dw_ui_test.cc | 1 + test/fltk_browser.cc | 1 + 18 files changed, 22 insertions(+), 1 deletion(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc index 10c3fa65..9c17eabb 100644 --- a/dw/fltkviewbase.cc +++ b/dw/fltkviewbase.cc @@ -78,6 +78,7 @@ FltkViewBase::FltkViewBase (int x, int y, int w, int h, const char *label): if (backBuffer == NULL) { backBuffer = new BackBuffer (); } + box(FL_NO_BOX); } FltkViewBase::~FltkViewBase () diff --git a/src/ui.cc b/src/ui.cc index 27303115..5ca58e8e 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -683,6 +683,7 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : TabTooltip = NULL; TopGroup = this; TopGroup->type(VERTICAL); + TopGroup->box(FL_NO_BOX); clear_flag(SHORTCUT_LABEL); if (cur_ui) { diff --git a/src/uicmd.cc b/src/uicmd.cc index fd6067e6..02747e48 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -96,6 +96,7 @@ public: Fl_Box *w = new Fl_Box(0,0,0,0,"i n v i s i b l e"); w->box(FL_NO_BOX); resizable(0); + box(FL_FLAT_BOX); end(); Wizard = new Fl_Wizard(0,tab_h,ww,wh-tab_h); @@ -391,7 +392,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, else win = new Fl_Double_Window(ww, wh); - //Fl_Group::current(0); + win->box(FL_NO_BOX); CustTabs *DilloTabs = new CustTabs(ww, wh, 16); win->end(); diff --git a/test/dw_anchors_test.cc b/test/dw_anchors_test.cc index be5bed7a..17a0d699 100644 --- a/test/dw_anchors_test.cc +++ b/test/dw_anchors_test.cc @@ -99,6 +99,7 @@ int main(int argc, char **argv) layout = new Layout (platform); window = new Fl_Window(250, 200, "Dw Anchors Test"); + window->box(FL_NO_BOX); window->begin(); viewport = new FltkViewport (50, 0, 200, 200); diff --git a/test/dw_border_test.cc b/test/dw_border_test.cc index 5f7b8bb5..453d5a3f 100644 --- a/test/dw_border_test.cc +++ b/test/dw_border_test.cc @@ -39,6 +39,7 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(200, 300, "Dw Border Test"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 200, 300); diff --git a/test/dw_example.cc b/test/dw_example.cc index 674252fe..c83878de 100644 --- a/test/dw_example.cc +++ b/test/dw_example.cc @@ -34,6 +34,7 @@ int main(int argc, char **argv) dw::core::Layout *layout = new dw::core::Layout (platform); Fl_Window *window = new Fl_Window(200, 300, "Dw Example"); + window->box(FL_NO_BOX); window->begin(); dw::fltk::FltkViewport *viewport = diff --git a/test/dw_find_test.cc b/test/dw_find_test.cc index d007301a..01032285 100644 --- a/test/dw_find_test.cc +++ b/test/dw_find_test.cc @@ -73,6 +73,7 @@ int main(int argc, char **argv) layout = new Layout (platform); window = new Fl_Window(200, 300, "Dw Find Test"); + window->box(FL_NO_BOX); window->begin(); viewport = new FltkViewport (0, 0, 200, 280); @@ -90,6 +91,7 @@ int main(int argc, char **argv) resetButton->clear_visible_focus (); resultLabel = new Fl_Box(100, 280, 100, 20, "---"); + resultLabel->box(FL_FLAT_BOX); FontAttrs fontAttrs; fontAttrs.name = "Bitstream Charter"; diff --git a/test/dw_images_scaled.cc b/test/dw_images_scaled.cc index a6b3d390..171930cb 100644 --- a/test/dw_images_scaled.cc +++ b/test/dw_images_scaled.cc @@ -96,6 +96,7 @@ int main(int argc, char **argv) layout = new Layout (platform); Fl_Window *window = new Fl_Window(410, 210, "Dw Scaled Image"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 410, 210); diff --git a/test/dw_images_scaled2.cc b/test/dw_images_scaled2.cc index 5a8e0f57..0e897188 100644 --- a/test/dw_images_scaled2.cc +++ b/test/dw_images_scaled2.cc @@ -73,6 +73,7 @@ int main(int argc, char **argv) layout = new Layout (platform); Fl_Window *window = new Fl_Window(410, 210, "Dw Scaled Image 2"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 410, 210); diff --git a/test/dw_images_simple.cc b/test/dw_images_simple.cc index d2554929..ec6f6008 100644 --- a/test/dw_images_simple.cc +++ b/test/dw_images_simple.cc @@ -97,6 +97,7 @@ int main(int argc, char **argv) layout = new Layout (platform); Fl_Window *window = new Fl_Window(410, 210, "Dw Simple Image"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 410, 210); diff --git a/test/dw_links.cc b/test/dw_links.cc index 5160462b..a73e6c46 100644 --- a/test/dw_links.cc +++ b/test/dw_links.cc @@ -77,6 +77,7 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(200, 300, "Dw Links"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 200, 300); diff --git a/test/dw_links2.cc b/test/dw_links2.cc index a4a6bbab..bca9a8ac 100644 --- a/test/dw_links2.cc +++ b/test/dw_links2.cc @@ -80,11 +80,13 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(200, 300, "Dw Links2"); + window->box(FL_NO_BOX); window->begin(); Fl_Widget *Panel = new Fl_Box(0, 0, ww, lh, "CONTROL PANEL"); Panel->color(FL_GRAY_RAMP + 3); Panel->labelcolor(FL_WHITE); + Panel->box(FL_FLAT_BOX); Fl_Widget *Main = new Fl_Box(0, lh, ww, wh - 2*lh, "MAIN RENDERING AREA"); Main->color(FL_GRAY_RAMP + 4); Main->labelcolor(FL_WHITE); @@ -93,6 +95,7 @@ int main(int argc, char **argv) Fl_Widget *Bar = new Fl_Box(0, wh - lh, 200, lh, "STATUS BAR..."); Bar->color(FL_GRAY_RAMP + 3); Bar->labelcolor(FL_WHITE); + Bar->box(FL_FLAT_BOX); window->resizable(Main); window->end(); diff --git a/test/dw_lists.cc b/test/dw_lists.cc index 9d0298ca..9862f09c 100644 --- a/test/dw_lists.cc +++ b/test/dw_lists.cc @@ -39,6 +39,7 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(200, 300, "Dw Lists"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 200, 300); diff --git a/test/dw_resource_test.cc b/test/dw_resource_test.cc index 7b550594..671d0d10 100644 --- a/test/dw_resource_test.cc +++ b/test/dw_resource_test.cc @@ -40,6 +40,7 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(410, 210, "Dw Resource test"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 410, 210); diff --git a/test/dw_table.cc b/test/dw_table.cc index 1d4ae368..21a381f7 100644 --- a/test/dw_table.cc +++ b/test/dw_table.cc @@ -39,6 +39,7 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(300, 300, "Dw Table"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 300, 300); diff --git a/test/dw_table_aligned.cc b/test/dw_table_aligned.cc index e6043f3c..0f4441a9 100644 --- a/test/dw_table_aligned.cc +++ b/test/dw_table_aligned.cc @@ -39,6 +39,7 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(200, 300, "Dw Table Aligned"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 200, 300); diff --git a/test/dw_ui_test.cc b/test/dw_ui_test.cc index 57368fab..dee2809d 100644 --- a/test/dw_ui_test.cc +++ b/test/dw_ui_test.cc @@ -44,6 +44,7 @@ int main(int argc, char **argv) Layout *layout = new Layout (platform); Fl_Window *window = new Fl_Window(400, 400, "Dw UI Test"); + window->box(FL_NO_BOX); window->begin(); FltkViewport *viewport = new FltkViewport (0, 0, 400, 400); diff --git a/test/fltk_browser.cc b/test/fltk_browser.cc index d5d5ef32..9afda33a 100644 --- a/test/fltk_browser.cc +++ b/test/fltk_browser.cc @@ -26,6 +26,7 @@ int main (int argc, char *argv[]) { Fl_Window *window = new Fl_Window (300, 300, "FLTK Browser"); + window->box(FL_NO_BOX); window->begin (); Fl_Browser *browser = new Fl_Browser (0, 0, 300, 300); browser->begin (); -- cgit v1.2.3 From 399b0fa3b970ec1ff6969902639d5058c3e732a9 Mon Sep 17 00:00:00 2001 From: corvid Date: Mon, 16 May 2011 19:13:04 +0000 Subject: rm spaces --- dw/fltkcomplexbutton.cc | 2 +- dw/fltkcomplexbutton.hh | 4 ++-- dw/fltkui.cc | 2 +- dw/fltkviewbase.cc | 4 ++-- dw/fltkviewbase.hh | 2 +- dw/fltkviewport.cc | 2 +- src/cssparser.cc | 2 +- src/html.cc | 2 +- src/menu.cc | 6 +++--- src/ui.cc | 4 ++-- src/uicmd.cc | 2 +- 11 files changed, 16 insertions(+), 16 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkcomplexbutton.cc b/dw/fltkcomplexbutton.cc index 211a37e8..39257bde 100644 --- a/dw/fltkcomplexbutton.cc +++ b/dw/fltkcomplexbutton.cc @@ -126,7 +126,7 @@ int ComplexButton::handle(int event) { return 1; case FL_SHORTCUT: if (!(shortcut() ? - Fl::test_shortcut(shortcut()) : test_shortcut())) return 0; + Fl::test_shortcut(shortcut()) : test_shortcut())) return 0; if (Fl::visible_focus() && handle(FL_FOCUS)) Fl::focus(this); goto triggered_by_keyboard; case FL_FOCUS : /* FALLTHROUGH */ diff --git a/dw/fltkcomplexbutton.hh b/dw/fltkcomplexbutton.hh index 6266694a..e4ca2e2b 100644 --- a/dw/fltkcomplexbutton.hh +++ b/dw/fltkcomplexbutton.hh @@ -23,7 +23,7 @@ #include // values for type() -#define FL_NORMAL_BUTTON 0 /**< value() will be set to 1 during the press of the button and +#define FL_NORMAL_BUTTON 0 /**< value() will be set to 1 during the press of the button and reverts back to 0 when the button is released */ #define FL_TOGGLE_BUTTON 1 ///< value() toggles between 0 and 1 at every click of the button #define FL_RADIO_BUTTON (FL_RESERVED_TYPE+2) /**< is set to 1 at button press, and all other @@ -49,7 +49,7 @@ protected: static Fl_Widget_Tracker *key_release_tracker; static void key_release_timeout(void*); void simulate_key_action(); - + virtual void draw(); public: diff --git a/dw/fltkui.cc b/dw/fltkui.cc index f79dea80..c29a32ec 100644 --- a/dw/fltkui.cc +++ b/dw/fltkui.cc @@ -980,7 +980,7 @@ Fl_Menu_Item *FltkOptionMenuResource::newItem() return item; } - + void FltkOptionMenuResource::addItem (const char *str, bool enabled, bool selected) { diff --git a/dw/fltkviewbase.cc b/dw/fltkviewbase.cc index de974578..eaaae1c4 100644 --- a/dw/fltkviewbase.cc +++ b/dw/fltkviewbase.cc @@ -143,7 +143,7 @@ void FltkViewBase::draw (const core::Rectangle *rect, // fl_clip_box() can't handle values greater than SHRT_MAX! if (X > x () + w () || Y > y () + h ()) return; - + W = X + rect->width > x () + w () ? x () + w () - X : rect->width; H = Y + rect->height > y () + h () ? y () + h () - Y : rect->height; @@ -288,7 +288,7 @@ int FltkViewBase::handle (int event) case FL_UNFOCUS: focused_child = fl_oldfocus; return 0; - + default: return Fl_Group::handle (event); } diff --git a/dw/fltkviewbase.hh b/dw/fltkviewbase.hh index 4fb7df9d..b1b6c4ab 100644 --- a/dw/fltkviewbase.hh +++ b/dw/fltkviewbase.hh @@ -23,7 +23,7 @@ private: public: Fl_Offscreen offscreen; - + BackBuffer (); ~BackBuffer (); void setSize(int w, int h); diff --git a/dw/fltkviewport.cc b/dw/fltkviewport.cc index 135550e8..9e75932f 100644 --- a/dw/fltkviewport.cc +++ b/dw/fltkviewport.cc @@ -147,7 +147,7 @@ void FltkViewport::hscrollbarCallback (Fl_Widget *hscrollbar,void *viewportPtr) // ---------------------------------------------------------------------- -void FltkViewport::resize(int X, int Y, int W, int H) +void FltkViewport::resize(int X, int Y, int W, int H) { bool dimension_changed = W != w() || H != h(); diff --git a/src/cssparser.cc b/src/cssparser.cc index aa4cea56..1075ef63 100644 --- a/src/cssparser.cc +++ b/src/cssparser.cc @@ -1522,7 +1522,7 @@ const char * CssParser::propertyNameString(CssPropertyName name) { return Css_property_info[name].symbol; } - + void CssParser::ignoreBlock() { int depth = 0; diff --git a/src/html.cc b/src/html.cc index ede391a3..c3235209 100644 --- a/src/html.cc +++ b/src/html.cc @@ -2880,7 +2880,7 @@ static void Html_tag_open_meta(DilloHtml *html, const char *tag, int tagsize) if (a_Url_cmp(html->base_url, new_url) == 0) { /* redirection loop, or empty url string: ignore */ - BUG_MSG("META refresh: %s\n", + BUG_MSG("META refresh: %s\n", *mr_url ? "redirection loop" : "no target URL"); } else if (delay == 0) { /* zero-delay redirection */ diff --git a/src/menu.cc b/src/menu.cc index fa725931..d054a917 100644 --- a/src/menu.cc +++ b/src/menu.cc @@ -505,8 +505,8 @@ void a_Menu_bugmeter_popup(BrowserWindow *bw, const DilloUrl *url) {"Validate URL with WDG", 0, Menu_bugmeter_validate_wdg_cb, 0, FL_MENU_DIVIDER,0,0,0,0}, {"About bug meter", 0, Menu_bugmeter_about_cb,0,0,0,0,0,0}, - {0,0,0,0,0,0,0,0,0} - }; + {0,0,0,0,0,0,0,0,0} + }; popup_x = Fl::event_x(); popup_y = Fl::event_y(); @@ -620,7 +620,7 @@ void a_Menu_tools_popup(BrowserWindow *bw, void *v_wid) {"Use remote CSS", 0, Menu_remote_css_cb, 0, FL_MENU_TOGGLE,0,0,0,0}, {"Use embedded CSS", 0, Menu_embedded_css_cb, 0, FL_MENU_TOGGLE|FL_MENU_DIVIDER,0,0,0,0}, - {"Load images", 0, Menu_imgload_toggle_cb, 0, + {"Load images", 0, Menu_imgload_toggle_cb, 0, FL_MENU_TOGGLE|FL_MENU_DIVIDER,0,0,0,0}, {"Panel size", 0, 0, (void*)"Submenu1", FL_SUBMENU,0,0,0,0}, {"tiny", 0,Menu_panel_change_cb,(void*)0,FL_MENU_RADIO,0,0,0,0}, diff --git a/src/ui.cc b/src/ui.cc index 5ca58e8e..a8a802fb 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -707,7 +707,7 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : // Control panel TopGroup->begin(); make_panel(ui_w); - + // Render area int main_h = ui_h - (mh+(LocBar?lh:0)+nh+fh+sh); Main = new Fl_Group(0,0,0,main_h,"Welcome..."); @@ -721,7 +721,7 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : TopGroup->add(Main); TopGroup->resizable(Main); MainIdx = TopGroup->find(Main); - + // Find text bar FindBarSpace = 1; FindBar = new Findbar(ui_w, fh); diff --git a/src/uicmd.cc b/src/uicmd.cc index 02747e48..415f0d3b 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -305,7 +305,7 @@ void CustTabs::set_tab_label(UI *ui, const char *label) { char title[128]; int idx = get_btn_idx(ui); - + if (idx > 0) { // Make a label for this tab size_t tab_chars = 7, label_len = strlen(label); -- cgit v1.2.3 From 43bc67a98263ec6c4a561c3c14dc688b7ee59fca Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Tue, 17 May 2011 13:58:58 -0400 Subject: uicmd.cc: remove an unnecessary static variable --- src/uicmd.cc | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 415f0d3b..09c33ce8 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -56,7 +56,6 @@ using namespace dw::fltk; * Local data */ static char *save_dir = NULL; -static UI *Gui; /* * Forward declarations @@ -398,7 +397,7 @@ BrowserWindow *a_UIcmd_browser_window_new(int ww, int wh, int focus = 1; new_bw = UIcmd_tab_new(DilloTabs, old_ui, focus); - win->resizable(Gui); + win->resizable(BW2UI(new_bw)); win->show(); if (old_bw == NULL && prefs.xpos >= 0 && prefs.ypos >= 0) { @@ -421,7 +420,6 @@ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, UI *old_ui, int focus) // Create and set the UI UI *new_ui = tabs->add_new_tab(old_ui, focus); - Gui = new_ui; // Now create the Dw render layout and viewport FltkPlatform *platform = new FltkPlatform (); -- cgit v1.2.3 From 5bffa87a1d72795ae5c6a7a4778bf6f7323bb953 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Tue, 17 May 2011 18:57:29 -0400 Subject: Made KEYS_LEFT_TAB and KEYS_RIGHT_TAB no longer handled as a special case * Made TAB-key focus the main area from location input. * Made KEYS_LEFT_TAB and KEYS_RIGHT_TAB cycle.. --- src/ui.cc | 12 ++++++++---- src/uicmd.cc | 26 +++++++------------------- 2 files changed, 15 insertions(+), 23 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/ui.cc b/src/ui.cc index a8a802fb..9be4d60b 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -93,8 +93,8 @@ public: }; /* - * Disable keys: Up, Down, Page_Up, Page_Down and - * CTRL+{o,r,Home,End} + * Disable keys: Up, Down, Page_Up, Page_Down, Tab and + * CTRL+{o,r,Home,End} SHIFT+{Left,Right}. */ int CustInput::handle(int e) { @@ -113,7 +113,11 @@ int CustInput::handle(int e) if (k == FL_Escape && modifier == 0) { // Let the parent group handle this Esc key return 0; - + } else if (modifier == FL_SHIFT) { + if (k == FL_Left || k == FL_Right) { + // Let these keys get to the UI + return 0; + } } else if (modifier == FL_CTRL) { if (k == 'l') { // Make text selected when already focused. @@ -126,7 +130,7 @@ int CustInput::handle(int e) } } else if (modifier == 0) { if (k == FL_Down || k == FL_Up || - k == FL_Page_Down || k == FL_Page_Up) { + k == FL_Page_Down || k == FL_Page_Up || k == FL_Tab) { // Give up focus and honor the key a_UIcmd_focus_main_area(a_UIcmd_get_bw_by_widget(this)); return 0; diff --git a/src/uicmd.cc b/src/uicmd.cc index 09c33ce8..b403d827 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -149,6 +149,7 @@ int CustTabs::handle(int e) ret = 1; } else if (cmd == KEYS_NOP) { // Do nothing + _MSG("CustTabs::handle KEYS_NOP\n"); } else if (cmd == KEYS_NEW_TAB) { a_UIcmd_open_url_nt(bw, NULL, 1); ret = 1; @@ -156,10 +157,10 @@ int CustTabs::handle(int e) a_UIcmd_close_bw(bw); ret = 1; } else if (cmd == KEYS_LEFT_TAB) { - MSG("CustTabs::handle KEYS_LEFT_TAB\n"); + prev_tab(); ret = 1; } else if (cmd == KEYS_RIGHT_TAB) { - MSG("CustTabs::handle KEYS_RIGHT_TAB\n"); + next_tab(); ret = 1; } else if (cmd == KEYS_NEW_WINDOW) { a_UIcmd_open_url_nw(bw, NULL); @@ -171,19 +172,6 @@ int CustTabs::handle(int e) a_Timeout_add(0.0, a_UIcmd_close_all_bw, NULL); ret = 1; } - - } else if (e == FL_KEYUP) { - int k = Fl::event_key(); - // We're only interested in some flags - unsigned modifier = Fl::event_state() & (FL_SHIFT | FL_CTRL | FL_ALT); - if (k == FL_Up || k == FL_Down || k == FL_Tab) { - ; - } else if (k == FL_Left || k == FL_Right) { - if (modifier == FL_SHIFT) { - (k == FL_Left) ? prev_tab() : next_tab(); - ret = 1; - } - } } return (ret) ? ret : CustGroup::handle(e); @@ -285,16 +273,16 @@ void CustTabs::prev_tab() { int idx; - if ((idx = get_btn_idx((UI*)Wizard->value())) > 1) - switch_tab( (CustTabButton*)child(idx-1) ); + if ((idx = get_btn_idx((UI*)Wizard->value())) != -1) + switch_tab( (CustTabButton*)child(idx > 1 ? idx-1 : num_tabs()) ); } void CustTabs::next_tab() { int idx; - if ((idx = get_btn_idx((UI*)Wizard->value())) > 0 && idx < num_tabs()) - switch_tab( (CustTabButton*)child(idx+1) ); + if ((idx = get_btn_idx((UI*)Wizard->value())) != -1) + switch_tab( (CustTabButton*)child(idx < num_tabs() ? idx+1 : 1) ); } /* -- cgit v1.2.3 From 6f569cdca6e2da6bbfb09152cd3006e22b8d2356 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Wed, 18 May 2011 14:05:55 -0400 Subject: Made SHIFT+{Left,Right} keyboard events work from the findbar --- src/findbar.cc | 8 ++++---- src/uicmd.cc | 14 -------------- 2 files changed, 4 insertions(+), 18 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/findbar.cc b/src/findbar.cc index cb0b345b..02f9545b 100644 --- a/src/findbar.cc +++ b/src/findbar.cc @@ -36,10 +36,10 @@ int MyInput::handle(int e) unsigned modifier = Fl::event_state() & (FL_SHIFT| FL_CTRL| FL_ALT|FL_META); if (e == FL_KEYBOARD) { - if (k == FL_Left || k == FL_Right) { - if (modifier == FL_SHIFT) { - a_UIcmd_send_event_to_tabs_by_wid(e, this); - return 1; + if (modifier == FL_SHIFT) { + if (k == FL_Left || k == FL_Right) { + // Let these keys get to the UI + return 0; } } else if (k == FL_Escape && modifier == 0) { // Avoid clearing the text with Esc, just hide the findbar. diff --git a/src/uicmd.cc b/src/uicmd.cc index b403d827..1e58df51 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -340,20 +340,6 @@ BrowserWindow *a_UIcmd_get_bw_by_widget(void *v_wid) return NULL; } -/* - * FLTK regards SHIFT + {Left, Right} as navigation keys. - * Special handling is required to override it. Here we route - * these events directly to the recipient. - * TODO: focus is not remembered correctly. - */ -void a_UIcmd_send_event_to_tabs_by_wid(int e, void *v_wid) -{ - BrowserWindow *bw = a_UIcmd_get_bw_by_widget(v_wid); - UI *ui = (UI*)bw->ui; - if (ui->tabs()) - ui->tabs()->handle(e); -} - /* * Create a new UI and its associated BrowserWindow data structure. * Use style from v_ui. If non-NULL it must be of type UI*. -- cgit v1.2.3 From 00df6fa92c4ca418822f13ceca30fdd2574b3ffb Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Sun, 22 May 2011 10:16:01 -0400 Subject: sync window title with current tab --- src/uicmd.cc | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 1e58df51..c95054c6 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -254,6 +254,7 @@ void CustTabs::switch_tab(CustTabButton *cbtn) { int idx; CustTabButton *btn; + BrowserWindow *bw; UI *old_ui = (UI*)Wizard->value(); if (cbtn->ui() != old_ui) { @@ -266,6 +267,12 @@ void CustTabs::switch_tab(CustTabButton *cbtn) Wizard->value(cbtn->ui()); cbtn->color(tabcolor_active); cbtn->redraw(); + + // Update window title + if ((bw = a_UIcmd_get_bw_by_widget(cbtn->ui()))) { + const char *title = a_History_get_title(NAV_TOP_UIDX(bw), 1); + a_UIcmd_set_page_title(bw, title ? title : ""); + } } } -- cgit v1.2.3 From f8e218199b36a728ee7523e8e6a20d088f1befbb Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Thu, 26 May 2011 21:12:33 +0200 Subject: remove use of Fl_Pack to avoid resizing issues CustGroup is split into CustGroupHorizontal and CustGroupVertical. CustGroupVertical is then used to replace Fl_Pack for TopGroup. --- src/ui.cc | 43 ++++++++++++------------ src/ui.hh | 108 ++++++++++++++++++++++++++--------------------------------- src/uicmd.cc | 6 ++-- 3 files changed, 72 insertions(+), 85 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/ui.cc b/src/ui.cc index 5762f15d..1004bfdc 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -535,7 +535,7 @@ Fl_Widget *UI::make_filemenu_button() Fl_Button *btn; int w = 0, h = 0, padding; - FileButton = btn = new Fl_Button(p_xpos,0,0,0,"W"); + FileButton = btn = new Fl_Button(p_xpos,0,bw,bh,"W"); btn->labeltype(FL_FREE_LABELTYPE); btn->measure_label(w, h); padding = w; @@ -595,7 +595,7 @@ void UI::make_panel(int ww) current(0); if (PanelSize == P_tiny) { - NavBar = new CustGroup(0,0,ww,nh); + NavBar = new CustGroupHorizontal(0,0,ww,nh); NavBar->begin(); make_toolbar(ww,bh); make_filemenu_button(); @@ -604,38 +604,42 @@ void UI::make_panel(int ww) make_progress_bars(0,1); NavBar->box(FL_THIN_UP_FRAME); NavBar->end(); + NavBar->rearrange(); TopGroup->insert(*NavBar,0); } else { if (PanelSize == P_large) { - MenuBar = new CustGroup(0,0,ww,mh); + MenuBar = new CustGroupHorizontal(0,0,ww,mh); MenuBar->begin(); MenuBar->box(FL_THIN_UP_BOX); Fl_Widget *bn = make_filemenu_button(); MenuBar->add_resizable(*new Fl_Box(bn->w(),0,ww - bn->w(),mh)); MenuBar->end(); + MenuBar->rearrange(); TopGroup->insert(*MenuBar,0); p_xpos = 0; - LocBar = new CustGroup(0,0,ww,lh); + LocBar = new CustGroupHorizontal(0,0,ww,lh); LocBar->begin(); make_location(ww); LocBar->resizable(Location); LocBar->end(); + LocBar->rearrange(); TopGroup->insert(*LocBar,1); } else { - LocBar = new CustGroup(0,0,ww,lh); + LocBar = new CustGroupHorizontal(0,0,ww,lh); LocBar->begin(); p_xpos = 0; make_filemenu_button(); make_location(ww); LocBar->resizable(Location); LocBar->end(); + LocBar->rearrange(); TopGroup->insert(*LocBar,0); } // Toolbar p_ypos = 0; - NavBar = new CustGroup(0,0,ww,bh); + NavBar = new CustGroupHorizontal(0,0,ww,bh); NavBar->begin(); make_toolbar(ww,bh); w = new Fl_Box(p_xpos,0,ww-p_xpos-2*pw,bh); @@ -648,6 +652,7 @@ void UI::make_panel(int ww) make_progress_bars(1,0); } NavBar->end(); + NavBar->rearrange(); TopGroup->insert(*NavBar,(MenuBar ? 2 : 1)); } } @@ -658,7 +663,7 @@ void UI::make_panel(int ww) void UI::make_status_bar(int ww, int wh) { const int bm_w = 20; - StatusBar = new CustGroup(0, wh-sh, ww, sh); + StatusBar = new CustGroupHorizontal(0, wh-sh, ww, sh); // Status box StatusOutput = new Fl_Output(0, wh-sh, ww-bm_w, sh); @@ -680,13 +685,14 @@ void UI::make_status_bar(int ww, int wh) StatusBar->end(); StatusBar->resizable(StatusOutput); + StatusBar->rearrange(); } /* * User Interface constructor */ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : - Fl_Pack(x, y, ui_w, ui_h, label) + CustGroupVertical(x, y, ui_w, ui_h, label) { PointerOnLink = FALSE; @@ -695,7 +701,6 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : Tabs = NULL; TabTooltip = NULL; TopGroup = this; - TopGroup->type(VERTICAL); TopGroup->box(FL_NO_BOX); clear_flag(SHORTCUT_LABEL); @@ -722,8 +727,7 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : make_panel(ui_w); // Render area - int main_h = ui_h - (mh+(LocBar?lh:0)+nh+fh+sh); - Main = new Fl_Group(0,0,0,main_h,"Welcome..."); + Main = new Fl_Group(0,0,0,0,"Welcome..."); // size is set by rearrange() Main->align(FL_ALIGN_CENTER|FL_ALIGN_INSIDE); Main->box(FL_FLAT_BOX); Main->color(FL_GRAY_RAMP + 3); @@ -743,8 +747,8 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : // Status Panel make_status_bar(ui_w, ui_h); TopGroup->add(StatusBar); - TopGroup->end(); + TopGroup->rearrange(); // Make the full screen button (to be attached to the viewport later) // TODO: attach to the viewport @@ -1049,11 +1053,7 @@ void UI::change_panel(int new_size, int small_icons) customize(0); a_UIcmd_set_buttons_sens(a_UIcmd_get_bw_by_widget(this)); - // adjust Main's height - int main_h = h() - (mh+(LocBar?lh:0)+nh+(FindBarSpace?fh:0)+sh); - Main->size(Main->w(), main_h); - redraw(); - + TopGroup->rearrange(); Location->take_focus(); } @@ -1086,6 +1086,7 @@ void UI::set_panelmode(UIPanelmode mode) StatusBar->show(); } Panelmode = mode; + TopGroup->rearrange(); } /* @@ -1110,7 +1111,7 @@ void UI::panelmode_cb_i() void UI::set_render_layout(Fl_Group *nw) { // Resize layout widget to current height - nw->resize(0,0,0,Main->h()); + nw->resize(0,Main->y(),Main->w(),Main->h()); TopGroup->insert(*nw, Main); remove(Main); @@ -1169,7 +1170,6 @@ void UI::findbar_toggle(bool add) insert(*FindBar, StatusBar); FindBar->show(); FindBarSpace = 1; - redraw(); } else { // select text FindBar->show(); @@ -1179,8 +1179,8 @@ void UI::findbar_toggle(bool add) Main->size(Main->w(), Main->h()+FindBar->h()); remove(FindBar); FindBarSpace = 0; - redraw(); /* Main->redraw(); is not enough */ } + TopGroup->rearrange(); } /* @@ -1217,6 +1217,5 @@ void UI::fullscreen_toggle() hide ? StatusBar->hide() : StatusBar->show();; } - Main->size(Main->w(), Main->h() + (hide ? dh : -dh)); - redraw(); + TopGroup->rearrange(); } diff --git a/src/ui.hh b/src/ui.hh index b42b2ab6..7865d9e9 100644 --- a/src/ui.hh +++ b/src/ui.hh @@ -7,7 +7,6 @@ #include #include #include -#include #include #include #include @@ -40,72 +39,62 @@ class CustTabs; // Class definition ---------------------------------------------------------- /* - * Used to reposition group's widgets when some of them are hidden + * Used to reposition group's widgets when some of them are hidden. + * All children get the height of the group but retain their original width. + * The resizable child get's the remaining space. */ -class CustGroup : public Fl_Group { +class CustGroupHorizontal : public Fl_Group { public: - CustGroup(int x,int y,int w ,int h,const char *l = 0) : + CustGroupHorizontal(int x,int y,int w ,int h,const char *l = 0) : Fl_Group(x,y,w,h,l) { }; - void rearrange(void) { - int n = children(), xpos = 0, r_x1, r_i = -1, i; - init_sizes(); - for (i = 0; i < n; ++i) { - if (child(i) == resizable()) { - r_i = i; - r_x1 = xpos; - break; - } - if (child(i)->visible()) { - child(i)->position(xpos, child(i)->y()); - xpos += child(i)->w(); - } - } - if (r_i < 0) - return; - xpos = w(); - for (i = n - 1; i > r_i; --i) { - if (child(i)->visible()) { - xpos -= child(i)->w(); - child(i)->position(xpos, child(i)->y()); + void rearrange() { + Fl_Widget*const* a = array(); + int sum = 0, _x = x(); + int children_ = children(); + + for (int i=0; i < children_; i++) + if (a[i] != resizable() && a[i]->visible()) + sum += a[i]->w(); + + for (int i=0; i < children_; i++) { + if (a[i] == resizable()) { + a[i]->resize(_x, y(), w() - sum, h()); + } else { + a[i]->resize(_x, y(), a[i]->w(), h()); } + if (a[i]->visible()) + _x += a[i]->w(); } - child(r_i)->resize(r_x1, child(r_i)->y(), xpos-r_x1, child(r_i)->h()); + init_sizes(); redraw(); } - void rearrange_y(void) { - int n = children(), pos = 0, r_pos, r_i = -1, i; +}; - printf("children = %d\n", n); - init_sizes(); - for (i = 0; i < n; ++i) { - if (child(i) == resizable()) { - r_i = i; - r_pos = pos; - break; - } - if (child(i)->visible()) { - printf("child[%d] x=%d y=%d w=%d h=%d\n", - i, child(i)->x(), pos, child(i)->w(), child(i)->h()); - child(i)->position(child(i)->x(), pos); - pos += child(i)->h(); - } - } - if (r_i < 0) - return; - pos = h(); - for (i = n - 1; i > r_i; --i) { - if (child(i)->visible()) { - pos -= child(i)->h(); - printf("child[%d] x=%d y=%d w=%d h=%d\n", - i, child(i)->x(), pos, child(i)->w(), child(i)->h()); - child(i)->position(child(i)->x(), pos); +class CustGroupVertical : public Fl_Group { +public: + CustGroupVertical(int x,int y,int w ,int h,const char *l = 0) : + Fl_Group(x,y,w,h,l) { }; + + void rearrange() { + Fl_Widget*const* a = array(); + int sum = 0, _y = y(); + int children_ = children(); + + for (int i=0; i < children_; i++) + if (a[i] != resizable() && a[i]->visible()) + sum += a[i]->h(); + + for (int i=0; i < children_; i++) { + if (a[i] == resizable()) { + a[i]->resize(x(), _y, w(), h() - sum); + } else { + a[i]->resize(x(), _y, w(), a[i]->h()); } + if (a[i]->visible()) + _y += a[i]->h(); } - child(r_i)->resize(child(r_i)->x(), r_pos, child(r_i)->w(), pos-r_pos); - printf("resizable child[%d] x=%d y=%d w=%d h=%d\n", - r_i, child(r_i)->x(), r_pos, child(r_i)->w(), child(r_i)->h()); - child(r_i)->hide(); + init_sizes(); redraw(); } }; @@ -114,16 +103,15 @@ public: // // UI class definition ------------------------------------------------------- // -class UI : public Fl_Pack { +class UI : public CustGroupVertical { CustTabs *Tabs; char *TabTooltip; - Fl_Group *TopGroup; + CustGroupVertical *TopGroup; Fl_Button *Back, *Forw, *Home, *Reload, *Save, *Stop, *Bookmarks, *Tools, *Clear, *Search, *Help, *FullScreen, *BugMeter, *FileButton; - CustGroup *MenuBar, *LocBar, *NavBar, *StatusBar; + CustGroupHorizontal *MenuBar, *LocBar, *NavBar, *StatusBar; Fl_Input *Location; - Fl_Pack *ProgBox; CustProgressBox *PProg, *IProg; Fl_Group *Panel, *Main; Fl_Output *StatusOutput; diff --git a/src/uicmd.cc b/src/uicmd.cc index c95054c6..a28128c8 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -83,13 +83,13 @@ public: /* * Allows fine control of the tabbed interface */ -class CustTabs : public CustGroup { +class CustTabs : public CustGroupHorizontal { int tab_w, tab_h, tab_n; Fl_Wizard *Wizard; int tabcolor_inactive, tabcolor_active, curtab_idx; public: CustTabs (int ww, int wh, int th, const char *lbl=0) : - CustGroup(0,0,ww,th,lbl) { + CustGroupHorizontal(0,0,ww,th,lbl) { tab_w = 80, tab_h = th, tab_n = 0, curtab_idx = -1; tabcolor_active = FL_DARK_CYAN; tabcolor_inactive = 206; Fl_Box *w = new Fl_Box(0,0,0,0,"i n v i s i b l e"); @@ -174,7 +174,7 @@ int CustTabs::handle(int e) } } - return (ret) ? ret : CustGroup::handle(e); + return (ret) ? ret : CustGroupHorizontal::handle(e); } /* -- cgit v1.2.3 From b0357cf1928e75b4128e6d4366897fc75449a28b Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Thu, 26 May 2011 19:21:15 -0400 Subject: Cleanups and bugfix for closing an unselected tab * Removed the invisible widget from the tabbar * Fixed closing the first tab when not selected * Removed a workaround (not necessary anymore) --- src/uicmd.cc | 40 ++++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index a28128c8..575fa082 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -92,9 +92,7 @@ public: CustGroupHorizontal(0,0,ww,th,lbl) { tab_w = 80, tab_h = th, tab_n = 0, curtab_idx = -1; tabcolor_active = FL_DARK_CYAN; tabcolor_inactive = 206; - Fl_Box *w = new Fl_Box(0,0,0,0,"i n v i s i b l e"); - w->box(FL_NO_BOX); - resizable(0); + resizable(NULL); box(FL_FLAT_BOX); end(); @@ -106,7 +104,7 @@ public: void remove_tab(UI *ui); Fl_Wizard *wizard(void) { return Wizard; } int get_btn_idx(UI *ui); - int num_tabs() { return (children() - 1); } // substract invisible box + int num_tabs() { return children(); } void switch_tab(CustTabButton *cbtn); void prev_tab(void); void next_tab(void); @@ -199,7 +197,6 @@ UI *CustTabs::add_new_tab(UI *old_ui, int focus) btn->color(focus ? tabcolor_active : tabcolor_inactive); btn->ui(new_ui); add(btn); - btn->redraw(); btn->callback(tab_btn_cb, this); if (focus) @@ -216,19 +213,19 @@ void CustTabs::remove_tab(UI *ui) { CustTabButton *btn; - // remove label button - int idx = get_btn_idx(ui); - btn = (CustTabButton*)child(idx); - idx > 1 ? prev_tab() : next_tab(); - - // WORKAROUND: with two tabs, closing the non-focused one, doesn't - // delete it from screen. This hide() call makes it work. --Jcid - btn->hide(); + // get active tab idx + int act_idx = get_btn_idx((UI*)Wizard->value()); + // get to-be-removed tab idx + int rm_idx = get_btn_idx(ui); + btn = (CustTabButton*)child(rm_idx); - remove(idx); + if (act_idx == rm_idx) { + // Active tab is being closed, switch to another one + rm_idx > 0 ? prev_tab() : next_tab(); + } + remove(rm_idx); delete btn; rearrange(); - redraw(); Wizard->remove(ui); delete(ui); @@ -242,7 +239,7 @@ void CustTabs::remove_tab(UI *ui) int CustTabs::get_btn_idx(UI *ui) { - for (int i = 1; i <= num_tabs(); ++i) { + for (int i = 0; i < num_tabs(); ++i) { CustTabButton *btn = (CustTabButton*)child(i); if (btn->ui() == ui) return i; @@ -250,6 +247,9 @@ int CustTabs::get_btn_idx(UI *ui) return -1; } +/* + * Make cbtn's tab the active one + */ void CustTabs::switch_tab(CustTabButton *cbtn) { int idx; @@ -259,7 +259,7 @@ void CustTabs::switch_tab(CustTabButton *cbtn) if (cbtn->ui() != old_ui) { // Set old tab label to normal color - if ((idx = get_btn_idx(old_ui)) > 0) { + if ((idx = get_btn_idx(old_ui)) != -1) { btn = (CustTabButton*)child(idx); btn->color(tabcolor_inactive); btn->redraw(); @@ -281,7 +281,7 @@ void CustTabs::prev_tab() int idx; if ((idx = get_btn_idx((UI*)Wizard->value())) != -1) - switch_tab( (CustTabButton*)child(idx > 1 ? idx-1 : num_tabs()) ); + switch_tab( (CustTabButton*)child(idx > 0 ? idx-1 : num_tabs()-1) ); } void CustTabs::next_tab() @@ -289,7 +289,7 @@ void CustTabs::next_tab() int idx; if ((idx = get_btn_idx((UI*)Wizard->value())) != -1) - switch_tab( (CustTabButton*)child(idx < num_tabs() ? idx+1 : 1) ); + switch_tab( (CustTabButton*)child((idx+1 < num_tabs()) ? idx+1 : 0) ); } /* @@ -300,7 +300,7 @@ void CustTabs::set_tab_label(UI *ui, const char *label) char title[128]; int idx = get_btn_idx(ui); - if (idx > 0) { + if (idx != -1) { // Make a label for this tab size_t tab_chars = 7, label_len = strlen(label); -- cgit v1.2.3 From a5e0529ddbbebe32ca3a652e53926389fbd00379 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Fri, 27 May 2011 09:47:48 -0400 Subject: Hide tabbar when (tabs == 1), show tabbar when (tabs >= 2) --- src/uicmd.cc | 31 ++++++++++++++++++++++++++----- 1 file changed, 26 insertions(+), 5 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 575fa082..275b059f 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -84,19 +84,20 @@ public: * Allows fine control of the tabbed interface */ class CustTabs : public CustGroupHorizontal { - int tab_w, tab_h, tab_n; + int tab_w, tab_h, ctab_h, tab_n; Fl_Wizard *Wizard; int tabcolor_inactive, tabcolor_active, curtab_idx; public: CustTabs (int ww, int wh, int th, const char *lbl=0) : CustGroupHorizontal(0,0,ww,th,lbl) { - tab_w = 80, tab_h = th, tab_n = 0, curtab_idx = -1; + tab_w = 80, tab_h = th, ctab_h = 1, tab_n = 0, curtab_idx = -1; tabcolor_active = FL_DARK_CYAN; tabcolor_inactive = 206; + resize(0,0,ww,ctab_h); resizable(NULL); box(FL_FLAT_BOX); end(); - Wizard = new Fl_Wizard(0,tab_h,ww,wh-tab_h); + Wizard = new Fl_Wizard(0,ctab_h,ww,wh-ctab_h); Wizard->end(); }; int handle(int e); @@ -182,14 +183,23 @@ UI *CustTabs::add_new_tab(UI *old_ui, int focus) { char tab_label[64]; + if (num_tabs() == 1) { + // Show tabbar + ctab_h = tab_h; + Wizard->resize(0,ctab_h,Wizard->w(),window()->h()-ctab_h); + resize(0,0,window()->w(),ctab_h); // tabbar + child(0)->show(); // first tab button + window()->init_sizes(); + } + current(0); - UI *new_ui = new UI(0,tab_h,Wizard->w(),Wizard->h(),0,old_ui); + UI *new_ui = new UI(0,ctab_h,Wizard->w(),Wizard->h(),0,old_ui); new_ui->tabs(this); Wizard->add(new_ui); new_ui->show(); snprintf(tab_label, 64,"ctab%d", ++tab_n); - CustTabButton *btn = new CustTabButton(num_tabs()*tab_w,0,tab_w,tab_h); + CustTabButton *btn = new CustTabButton(num_tabs()*tab_w,0,tab_w,ctab_h); btn->align(FL_ALIGN_INSIDE|FL_ALIGN_CLIP); btn->copy_label(tab_label); btn->clear_visible_focus(); @@ -201,6 +211,8 @@ UI *CustTabs::add_new_tab(UI *old_ui, int focus) if (focus) switch_tab(btn); + if (num_tabs() == 1) + btn->hide(); rearrange(); return new_ui; @@ -234,6 +246,15 @@ void CustTabs::remove_tab(UI *ui) window()->hide(); // TODO: free memory //delete window(); + + } else if (num_tabs() == 1) { + // hide tabbar + ctab_h = 1; + child(0)->hide(); // first tab button + resize(0,0,window()->w(),ctab_h); // tabbar + Wizard->resize(0,ctab_h,Wizard->w(),window()->h()-ctab_h); + window()->init_sizes(); + window()->redraw(); } } -- cgit v1.2.3 From 9b72578eab16832c7bf70984fb528339a3994e32 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Fri, 27 May 2011 13:26:15 -0400 Subject: Avoid unnecessary background redraws --- src/ui.cc | 4 ++++ src/uicmd.cc | 2 ++ 2 files changed, 6 insertions(+) (limited to 'src/uicmd.cc') diff --git a/src/ui.cc b/src/ui.cc index 30106c21..6fc769c8 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -591,6 +591,7 @@ void UI::make_panel(int ww) current(0); if (PanelSize == P_tiny) { NavBar = new CustGroupHorizontal(0,0,ww,nh); + NavBar->box(FL_NO_BOX); NavBar->begin(); make_toolbar(ww,bh); make_filemenu_button(); @@ -622,6 +623,7 @@ void UI::make_panel(int ww) TopGroup->insert(*LocBar,1); } else { LocBar = new CustGroupHorizontal(0,0,ww,lh); + LocBar->box(FL_NO_BOX); LocBar->begin(); p_xpos = 0; make_filemenu_button(); @@ -635,6 +637,7 @@ void UI::make_panel(int ww) // Toolbar p_ypos = 0; NavBar = new CustGroupHorizontal(0,0,ww,bh); + NavBar->box(FL_NO_BOX); NavBar->begin(); make_toolbar(ww,bh); w = new Fl_Box(p_xpos,0,ww-p_xpos-2*pw,bh); @@ -659,6 +662,7 @@ void UI::make_status_bar(int ww, int wh) { const int bm_w = 20; StatusBar = new CustGroupHorizontal(0, wh-sh, ww, sh); + StatusBar->box(FL_NO_BOX); // Status box StatusOutput = new Fl_Output(0, wh-sh, ww-bm_w, sh); diff --git a/src/uicmd.cc b/src/uicmd.cc index 275b059f..68550e41 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -98,6 +98,7 @@ public: end(); Wizard = new Fl_Wizard(0,ctab_h,ww,wh-ctab_h); + Wizard->box(FL_NO_BOX); Wizard->end(); }; int handle(int e); @@ -431,6 +432,7 @@ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, UI *old_ui, int focus) // set_render_layout() sets the proper viewport size FltkViewport *viewport = new FltkViewport (0, 0, 0, 1); + viewport->box(FL_NO_BOX); viewport->setBufferedDrawing (prefs.buffered_drawing ? true : false); layout->attachView (viewport); new_ui->set_render_layout(viewport); -- cgit v1.2.3 From eb255c05473929b8169d5c1796133e98586bc0b8 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Mon, 13 Jun 2011 14:25:13 -0400 Subject: Redraw current page when tabs = 2 and the new one doesn't take focus --- src/uicmd.cc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 577e2a17..10b90a50 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -210,8 +210,12 @@ UI *CustTabs::add_new_tab(UI *old_ui, int focus) add(btn); btn->callback(tab_btn_cb, this); - if (focus) + if (focus) { switch_tab(btn); + } else if (num_tabs() == 2) { + // no focus and tabbar added: redraw current page + Wizard->redraw(); + } if (num_tabs() == 1) btn->hide(); rearrange(); -- cgit v1.2.3 From b7a43cd0266d6b58db91461bba65f0f2dcdd3b6c Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid Date: Tue, 14 Jun 2011 17:48:29 -0400 Subject: Made tab and window titles more informative (WRT length) --- src/uicmd.cc | 5 +++-- src/web.cc | 7 +++++-- 2 files changed, 8 insertions(+), 4 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 10b90a50..5e30d72b 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -296,8 +296,8 @@ void CustTabs::switch_tab(CustTabButton *cbtn) // Update window title if ((bw = a_UIcmd_get_bw_by_widget(cbtn->ui()))) { - const char *title = a_History_get_title(NAV_TOP_UIDX(bw), 1); - a_UIcmd_set_page_title(bw, title ? title : ""); + const char *title = (cbtn->ui())->label(); + cbtn->window()->copy_label(title ? title : ""); } } } @@ -1157,6 +1157,7 @@ void a_UIcmd_set_page_title(BrowserWindow *bw, const char *label) uint_t i = MIN(size - 4, 1 + a_Utf8_end_of_char(title, size - 8)); snprintf(title + i, 4, "..."); } + BW2UI(bw)->copy_label(title); BW2UI(bw)->window()->copy_label(title); } BW2UI(bw)->tabs()->set_tab_label(BW2UI(bw), label); diff --git a/src/web.cc b/src/web.cc index 83700845..9daccdec 100644 --- a/src/web.cc +++ b/src/web.cc @@ -78,8 +78,11 @@ int a_Web_dispatch_by_type (const char *Type, DilloWeb *Web, /* This method frees the old dw if any */ layout->setWidget(dw); - /* Clear the title bar for pages without a tag */ - a_UIcmd_set_page_title(Web->bw, ""); + /* Set the page title with the bare filename (e.g. for images), + * HTML pages with a <TITLE> tag will overwrite it later */ + const char *p = strrchr(URL_STR(Web->url), '/'); + a_UIcmd_set_page_title(Web->bw, p ? p+1 : ""); + a_UIcmd_set_location_text(Web->bw, URL_STR(Web->url)); /* Reset both progress bars */ a_UIcmd_set_page_prog(Web->bw, 0, 2); -- cgit v1.2.3 From 2c2857f923c99ea38c63289702496feb46f9e7ca Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid <jcid@dillo.org> Date: Sat, 18 Jun 2011 10:07:29 -0400 Subject: Made dillorc's middle_click_drags_page=NO operative again * Added setDragScroll(bool) to the viewport to enable/disable it * Made middle-click paste URL upon FL_RELEASE --- dw/fltkviewport.cc | 23 +++++++++++++++-------- dw/fltkviewport.hh | 3 ++- src/ui.cc | 32 ++++++++++++++------------------ src/uicmd.cc | 1 + 4 files changed, 32 insertions(+), 27 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dw/fltkviewport.cc b/dw/fltkviewport.cc index 75c4e569..992df22b 100644 --- a/dw/fltkviewport.cc +++ b/dw/fltkviewport.cc @@ -23,6 +23,7 @@ #include <FL/Fl.H> #include <FL/fl_draw.H> +#include <FL/names.h> #include <stdio.h> #include "../lout/msg.h" @@ -64,6 +65,7 @@ FltkViewport::FltkViewport (int X, int Y, int W, int H, const char *label): vscrollbar->hide(); add (vscrollbar); + hasDragScroll = 1; scrollX = scrollY = scrollDX = scrollDY = 0; horScrolling = verScrolling = dragScrolling = 0; @@ -223,7 +225,7 @@ void FltkViewport::draw () int FltkViewport::handle (int event) { - _MSG("FltkViewport::handle %d\n", event); + _MSG("FltkViewport::handle %s\n", fl_eventnames[event]); switch(event) { case FL_KEYBOARD: @@ -249,13 +251,18 @@ int FltkViewport::handle (int event) } else if (hscrollbar->visible() && Fl::event_inside(hscrollbar)) { if (hscrollbar->handle(event)) horScrolling = 1; - } else if (FltkWidgetView::handle (event) == 0 && - Fl::event_button() == FL_MIDDLE_MOUSE) { - /* pass event so that middle click can open link in new window */ - dragScrolling = 1; - dragX = Fl::event_x(); - dragY = Fl::event_y(); - setCursor (core::style::CURSOR_MOVE); + } else if (FltkWidgetView::handle(event) == 0 && + Fl::event_button() == FL_MIDDLE_MOUSE) { + if (!hasDragScroll) { + /* let the parent widget handle it... */ + return 0; + } else { + /* receive FL_DRAG and FL_RELEASE */ + dragScrolling = 1; + dragX = Fl::event_x(); + dragY = Fl::event_y(); + setCursor (core::style::CURSOR_MOVE); + } } return 1; break; diff --git a/dw/fltkviewport.hh b/dw/fltkviewport.hh index 080d0f59..3df1dccb 100644 --- a/dw/fltkviewport.hh +++ b/dw/fltkviewport.hh @@ -21,7 +21,7 @@ private: int scrollX, scrollY; int scrollDX, scrollDY; - int dragScrolling, dragX, dragY; + int hasDragScroll, dragScrolling, dragX, dragY; int horScrolling, verScrolling; Fl_Scrollbar *vscrollbar, *hscrollbar; @@ -70,6 +70,7 @@ public: void setGadgetOrientation (bool hscrollbarVisible, bool vscrollbarVisible, GadgetOrientation gadgetOrientation); + void setDragScroll (bool enable) { hasDragScroll = enable ? 1 : 0; } void addGadget (Fl_Widget *gadget); }; diff --git a/src/ui.cc b/src/ui.cc index a2fd61c7..1731f469 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -23,6 +23,7 @@ #include <FL/Fl.H> #include <FL/Fl_Pixmap.H> #include <FL/Fl_Box.H> +#include <FL/names.h> // Include image data #include "pixmaps.h" @@ -780,7 +781,7 @@ UI::~UI() */ int UI::handle(int event) { - _MSG("UI::handle event=%d (%d,%d)\n", event, Fl::event_x(), Fl::event_y()); + _MSG("UI::handle event=%s\n", fl_eventnames[event]); int ret = 0; if (event == FL_KEYBOARD) { @@ -840,28 +841,23 @@ int UI::handle(int event) a_UIcmd_file_popup(a_UIcmd_get_bw_by_widget(this), FileButton); ret = 1; } - } -#if 0 - } else if (event == FL_PUSH) { - if (prefs.middle_click_drags_page == 0 && - Fl::event_button() == FL_MIDDLE_MOUSE && - !a_UIcmd_pointer_on_link(a_UIcmd_get_bw_by_widget(this))) { - if (Main->contains(Fl::belowmouse())) { - /* Offer the event to Main's children (form widgets) */ - /* TODO: Try just offering it to Fl::belowmouse() */ - ret = ((Fl_Group *)Main)->Fl_Group::handle(event); - } - if (!ret) { - /* middle click was not on a link or a form widget */ - paste_url(); - ret = 1; - } + } else if (event == FL_RELEASE) { + if (Fl::event_button() == FL_MIDDLE_MOUSE && + prefs.middle_click_drags_page == 0) { + /* nobody claimed the event; try paste */ + paste_url(); + ret = 1; } } -#endif + if (!ret) { ret = Fl_Group::handle(event); } + if (!ret && event == FL_PUSH && !prefs.middle_click_drags_page) { + /* nobody claimed FL_PUSH: ask for FL_RELEASE, + * which is necessary for middle-click paste URL) */ + ret = 1; + } return ret; } diff --git a/src/uicmd.cc b/src/uicmd.cc index 5e30d72b..5b90385b 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -438,6 +438,7 @@ static BrowserWindow *UIcmd_tab_new(CustTabs *tabs, UI *old_ui, int focus) FltkViewport *viewport = new FltkViewport (0, 0, 0, 1); viewport->box(FL_NO_BOX); viewport->setBufferedDrawing (prefs.buffered_drawing ? true : false); + viewport->setDragScroll (prefs.middle_click_drags_page ? true : false); layout->attachView (viewport); new_ui->set_render_layout(viewport); viewport->setScrollStep((int) rint(28.0 * prefs.font_factor)); -- cgit v1.2.3 From 97932ddbd2fd08d6123e89bf8d25c31f29157d43 Mon Sep 17 00:00:00 2001 From: corvid <corvid@lavabit.com> Date: Thu, 7 Jul 2011 03:39:59 +0000 Subject: fix comment --- src/uicmd.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 5b90385b..13cdfd91 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -957,7 +957,7 @@ void a_UIcmd_view_page_source(BrowserWindow *bw, const DilloUrl *url) } /* - * Show a text window with the URL's source + * Show the browser window's HTML errors in a text window */ void a_UIcmd_view_page_bugs(void *vbw) { -- cgit v1.2.3 From 64ebc0065c367226307a4d98b084ad024f02e972 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid <jcid@dillo.org> Date: Mon, 11 Jul 2011 14:03:47 -0400 Subject: Made "hide-panels" hide the findbar, then panels (and removed "fullscreen"). Redefined "hide-panels" to close the findbar if it's visible, and all the panels when the findbar is not visible. --- src/keys.cc | 1 - src/keys.hh | 1 - src/keysrc | 5 +---- src/ui.cc | 10 ++++------ src/ui.hh | 2 +- src/uicmd.cc | 9 +++------ src/uicmd.hh | 3 +-- 7 files changed, 10 insertions(+), 21 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/keys.cc b/src/keys.cc index 7f499153..e5510ef0 100644 --- a/src/keys.cc +++ b/src/keys.cc @@ -107,7 +107,6 @@ static const KeyBinding_t default_keys[] = { { "find" , KEYS_FIND , FL_CTRL , 'f' }, { "websearch" , KEYS_WEBSEARCH , FL_CTRL , 's' }, { "bookmarks" , KEYS_BOOKMARKS , FL_CTRL , 'b' }, - { "fullscreen" , KEYS_FULLSCREEN , FL_CTRL , ' ' }, { "reload" , KEYS_RELOAD , FL_CTRL , 'r' }, { "stop" , KEYS_STOP , 0 , 0 }, { "save" , KEYS_SAVE , 0 , 0 }, diff --git a/src/keys.hh b/src/keys.hh index d234838c..893cf17b 100644 --- a/src/keys.hh +++ b/src/keys.hh @@ -27,7 +27,6 @@ typedef enum { KEYS_FIND, KEYS_WEBSEARCH, KEYS_BOOKMARKS, - KEYS_FULLSCREEN, KEYS_RELOAD, KEYS_STOP, KEYS_SAVE, diff --git a/src/keysrc b/src/keysrc index ede236a9..df658be4 100644 --- a/src/keysrc +++ b/src/keysrc @@ -56,7 +56,7 @@ # "find" lets you search for a text string on the current page. #<ctrl>f = find -# "hide-panels" hides the findbar. +# "hide-panels" hides the findbar if present, control panels if not. #esc = hide-panels # "websearch" lets you send a text string to the search engine that you @@ -66,9 +66,6 @@ # go to your "bookmarks". #<ctrl>b = bookmarks -# "fullscreen" hides/shows the panels at the top and bottom of a dillo window. -#<ctrl>space = fullscreen - # "file-menu" pops up the file menu. #<alt>f = file-menu diff --git a/src/ui.cc b/src/ui.cc index 9d526958..0faa4da7 100644 --- a/src/ui.cc +++ b/src/ui.cc @@ -760,7 +760,7 @@ UI::UI(int x, int y, int ui_w, int ui_h, const char* label, const UI *cur_ui) : customize(0); if (Panelmode == UI_HIDDEN) { - fullscreen_toggle(); + panels_toggle(); } } @@ -824,7 +824,8 @@ int UI::handle(int event) focus_location(); ret = 1; } else if (cmd == KEYS_HIDE_PANELS) { - fullscreen_toggle(); + /* Hide findbar if present, hide panels if not */ + (FindBarSpace) ? findbar_toggle(0) : panels_toggle(); ret = 1; //if (get_panelmode() == UI_TEMPORARILY_SHOW_PANELS) // set_panelmode(UI_HIDDEN); @@ -843,9 +844,6 @@ int UI::handle(int event) } else if (cmd == KEYS_SAVE) { a_UIcmd_save(a_UIcmd_get_bw_by_widget(this)); ret = 1; - } else if (cmd == KEYS_FULLSCREEN) { - fullscreen_toggle(); - ret = 1; } else if (cmd == KEYS_FILE_MENU) { a_UIcmd_file_popup(a_UIcmd_get_bw_by_widget(this), FileButton); ret = 1; @@ -1193,7 +1191,7 @@ void UI::findbar_toggle(bool add) * size to (0,0) while hidden. * (Already reported to FLTK team) */ -void UI::fullscreen_toggle() +void UI::panels_toggle() { int hide = StatusBar->visible(); diff --git a/src/ui.hh b/src/ui.hh index 7865d9e9..beb202a9 100644 --- a/src/ui.hh +++ b/src/ui.hh @@ -160,7 +160,7 @@ public: int get_smallicons() { return Small_Icons; } void change_panel(int new_size, int small_icons); void findbar_toggle(bool add); - void fullscreen_toggle(); + void panels_toggle(); CustTabs *tabs() { return Tabs; } void tabs(CustTabs *tabs) { Tabs = tabs; } diff --git a/src/uicmd.cc b/src/uicmd.cc index 13cdfd91..f257d537 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -165,9 +165,6 @@ int CustTabs::handle(int e) } else if (cmd == KEYS_NEW_WINDOW) { a_UIcmd_open_url_nw(bw, NULL); ret = 1; - } else if (cmd == KEYS_FULLSCREEN) { - MSG("CustTabs::handle KEYS_FULLSCREEN\n"); - ret = 1; } else if (cmd == KEYS_CLOSE_ALL) { a_Timeout_add(0.0, a_UIcmd_close_all_bw, NULL); ret = 1; @@ -1216,11 +1213,11 @@ int a_UIcmd_pointer_on_link(BrowserWindow *bw) } /* - * Toggle control panel (aka. fullscreen) + * Toggle control panel */ -void a_UIcmd_fullscreen_toggle(BrowserWindow *bw) +void a_UIcmd_panels_toggle(BrowserWindow *bw) { - BW2UI(bw)->fullscreen_toggle(); + BW2UI(bw)->panels_toggle(); } /* diff --git a/src/uicmd.hh b/src/uicmd.hh index 65394ff2..dc7294a1 100644 --- a/src/uicmd.hh +++ b/src/uicmd.hh @@ -34,7 +34,7 @@ void a_UIcmd_search_dialog(void *vbw); const char *a_UIcmd_get_passwd(const char *user); void a_UIcmd_book(void *vbw); void a_UIcmd_add_bookmark(BrowserWindow *bw, const DilloUrl *url); -void a_UIcmd_fullscreen_toggle(BrowserWindow *bw); +void a_UIcmd_panels_toggle(BrowserWindow *bw); void a_UIcmd_findtext_dialog(BrowserWindow *bw); void a_UIcmd_findtext_search(BrowserWindow *bw,const char *key,int case_sens, int backwards); @@ -78,7 +78,6 @@ void a_UIcmd_set_bug_prog(BrowserWindow *bw, int n_bug); void a_UIcmd_set_page_title(BrowserWindow *bw, const char *label); void a_UIcmd_set_msg(BrowserWindow *bw, const char *format, ...); void a_UIcmd_set_buttons_sens(BrowserWindow *bw); -void a_UIcmd_fullscreen_toggle(BrowserWindow *bw); void a_UIcmd_set_pointer_on_link(BrowserWindow *bw, int flag); int a_UIcmd_pointer_on_link(BrowserWindow *bw); -- cgit v1.2.3 From 378a4098e362794b4feb3d75e40b6ada697c47e9 Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid <jcid@dillo.org> Date: Sun, 24 Jul 2011 13:47:24 -0400 Subject: Added multiple search engines (with several 'search_url' lines in dillorc) This patch adds the PREFS_STRINGS type to the prefsparser, which allows having multiple different strings asociated with one dillorc option (stored in a list) --- src/dialog.cc | 43 +++++++++++++++++++++++++++++++++++++++++++ src/prefs.c | 11 +++++++++-- src/prefs.h | 3 ++- src/prefsparser.cc | 16 +++++++++++++++- src/uicmd.cc | 7 ++++--- 5 files changed, 73 insertions(+), 7 deletions(-) (limited to 'src/uicmd.cc') diff --git a/src/dialog.cc b/src/dialog.cc index 9b3f8db2..7bde3dd2 100644 --- a/src/dialog.cc +++ b/src/dialog.cc @@ -22,6 +22,8 @@ #include <FL/Fl_Output.H> #include <FL/Fl_Input.H> #include <FL/Fl_Secret_Input.H> +#include <FL/Fl_Choice.H> +#include <FL/Fl_Menu_Item.H> #include "msg.h" #include "dialog.hh" @@ -75,6 +77,24 @@ int CustInput3::handle(int e) } return Fl_Input::handle(e); } + +/* + * Used to make the ENTER key activate the CustChoice + */ +class CustChoice : public Fl_Choice { +public: + CustChoice (int x, int y, int w, int h, const char* l=0) : + Fl_Choice(x,y,w,h,l) {}; + int handle(int e) { + if (e == FL_KEYBOARD && Fl::event_key() == FL_Enter && + (Fl::event_state() & (FL_SHIFT|FL_CTRL|FL_ALT|FL_META)) == 0) { + MSG("CustChoice: ENTER\n"); + return Fl_Choice::handle(FL_PUSH); + } + return Fl_Choice::handle(e); + }; +}; + //---------------------------------------------------------------------------- @@ -104,6 +124,7 @@ static void input_cb(Fl_Widget *button, void *number) */ const char *a_Dialog_input(const char *msg) { + static Fl_Menu_Item *pm = 0; int ww = 450, wh = 130, gap = 10, ih = 60, bw = 80, bh = 30; input_answer = 0; @@ -134,6 +155,26 @@ const char *a_Dialog_input(const char *msg) c_inp->labelsize(14); c_inp->textsize(14); + CustChoice *ch = new CustChoice(1*gap,ih+3*gap,180,24); + if (!pm) { + int n_it = dList_length(prefs.search_urls); + pm = new Fl_Menu_Item[n_it+1]; + memset(pm, '\0', sizeof(Fl_Menu_Item[n_it+1])); + for (int i = 0; i < n_it; i++) { + char *p, *q, label[32]; + char *url = (char *)dList_nth_data(prefs.search_urls, i); + if ((p = strstr(url, "//")) && (q = strstr(p+2,"/"))) { + strncpy(label,p+2,MIN(q-p-2,31)); + label[MIN(q-p-2,31)] = 0; + } + pm[i].label(FL_NORMAL_LABEL, strdup(label)); + } + } + ch->tooltip("Select search engine"); + ch->menu(pm); + ch->value(prefs.search_url_idx); + ch->textcolor(FL_DARK_BLUE); + int xpos = ww-2*(gap+bw), ypos = ih+3*gap; Fl_Return_Button *rb = new Fl_Return_Button(xpos, ypos, bw, bh, "OK"); rb->align(FL_ALIGN_INSIDE|FL_ALIGN_CLIP); @@ -156,6 +197,8 @@ const char *a_Dialog_input(const char *msg) /* we have a string, save it */ dFree(input_str); input_str = dStrdup(c_inp->value()); + MSG("a_Dialog_input value() = %d\n", ch->value()); + prefs.search_url_idx = ch->value(); } delete window; diff --git a/src/prefs.c b/src/prefs.c index be0882bd..cbd1f5d8 100644 --- a/src/prefs.c +++ b/src/prefs.c @@ -75,7 +75,10 @@ void a_Prefs_init(void) prefs.panel_size = P_medium; prefs.parse_embedded_css=TRUE; prefs.save_dir = dStrdup(PREFS_SAVE_DIR); - prefs.search_url = dStrdup(PREFS_SEARCH_URL); + prefs.search_urls = dList_new(16); + dList_append(prefs.search_urls, dStrdup(PREFS_SEARCH_URL)); + dList_append(prefs.search_urls, NULL); /* flags a default search URL */ + prefs.search_url_idx = 0; prefs.show_back = TRUE; prefs.show_bookmarks = TRUE; prefs.show_clear_url = TRUE; @@ -104,6 +107,8 @@ void a_Prefs_init(void) */ void a_Prefs_freeall(void) { + int i; + dFree(prefs.font_cursive); dFree(prefs.font_fantasy); dFree(prefs.font_monospace); @@ -117,6 +122,8 @@ void a_Prefs_freeall(void) dFree(prefs.http_user_agent); dFree(prefs.no_proxy); dFree(prefs.save_dir); - dFree(prefs.search_url); + for (i = 0; i < dList_length(prefs.search_urls); ++i) + dFree(dList_nth_data(prefs.search_urls, i)); + dList_free(prefs.search_urls); a_Url_free(prefs.start_page); } diff --git a/src/prefs.h b/src/prefs.h index 4debee89..19e3890a 100644 --- a/src/prefs.h +++ b/src/prefs.h @@ -85,7 +85,8 @@ struct _DilloPrefs { bool_t enterpress_forces_submit; bool_t middle_click_opens_new_tab; bool_t right_click_closes_tab; - char *search_url; + bool_t search_url_idx; + Dlist *search_urls; char *save_dir; bool_t show_msg; bool_t show_extra_warnings; diff --git a/src/prefsparser.cc b/src/prefsparser.cc index 9d245706..bf973225 100644 --- a/src/prefsparser.cc +++ b/src/prefsparser.cc @@ -24,6 +24,7 @@ typedef enum { PREFS_BOOL, PREFS_COLOR, PREFS_STRING, + PREFS_STRINGS, PREFS_URL, PREFS_INT32, PREFS_DOUBLE, @@ -86,7 +87,7 @@ int PrefsParser::parseOption(char *name, char *value) { "panel_size", &prefs.panel_size, PREFS_PANEL_SIZE }, { "parse_embedded_css", &prefs.parse_embedded_css, PREFS_BOOL }, { "save_dir", &prefs.save_dir, PREFS_STRING }, - { "search_url", &prefs.search_url, PREFS_STRING }, + { "search_url", &prefs.search_urls, PREFS_STRINGS }, { "show_back", &prefs.show_back, PREFS_BOOL }, { "show_bookmarks", &prefs.show_bookmarks, PREFS_BOOL }, { "show_clear_url", &prefs.show_clear_url, PREFS_BOOL }, @@ -134,6 +135,19 @@ int PrefsParser::parseOption(char *name, char *value) dFree(*(char **)node->pref); *(char **)node->pref = dStrdup(value); break; + case PREFS_STRINGS: + { + Dlist *lp = *(Dlist **)node->pref; + if (dList_length(lp) == 2 && !dList_nth_data(lp, 1)) { + /* override the default */ + void *data = dList_nth_data(lp, 0); + dList_remove(lp, data); + dList_remove(lp, NULL); + dFree(data); + } + dList_append(lp, dStrdup(value)); + break; + } case PREFS_URL: a_Url_free(*(DilloUrl **)node->pref); *(DilloUrl **)node->pref = a_Url_new(value, NULL); diff --git a/src/uicmd.cc b/src/uicmd.cc index f257d537..0e0e4f88 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -774,14 +774,15 @@ void a_UIcmd_open_file(void *vbw) /* * Returns a newly allocated string holding a search url generated from - * a string of keywords (separarated by blanks) and prefs.search_url. + * a string of keywords (separarated by blanks) and the current search_url. * The search string is urlencoded. */ static char *UIcmd_make_search_str(const char *str) { - char *keys = a_Url_encode_hex_str(str), *c = prefs.search_url; - Dstr *ds = dStr_sized_new(128); char *search_url; + char *keys = a_Url_encode_hex_str(str), + *c = (char*)dList_nth_data(prefs.search_urls, prefs.search_url_idx); + Dstr *ds = dStr_sized_new(128); for (; *c; c++) { if (*c == '%') -- cgit v1.2.3 From a748ecd3ed4b9f620f6b3b911a23f689902cdffd Mon Sep 17 00:00:00 2001 From: Jorge Arellano Cid <jcid@dillo.org> Date: Sun, 24 Jul 2011 13:47:25 -0400 Subject: Added an optional label to dillorc's search_url. Format: "[<label> ]<url>" --- dillorc | 7 +++++-- src/dialog.cc | 17 ++++++++--------- src/misc.c | 32 ++++++++++++++++++++++++++++++++ src/misc.h | 1 + src/uicmd.cc | 10 +++++++--- 5 files changed, 53 insertions(+), 14 deletions(-) (limited to 'src/uicmd.cc') diff --git a/dillorc b/dillorc index b990ea55..6c0aeab2 100644 --- a/dillorc +++ b/dillorc @@ -109,11 +109,14 @@ # home="file:/home/jcid/HomePage/Home.html" #home="http://www.dillo.org/" -# Set the URL used by the web search dialog. +# Set the URLs used by the web search dialog. # "%s" is replaced with the search keywords separated by '+'. +# Format: search_url="[<label> ]<url>" +# You can have several search engines, with the first being the default. +# e.g. +# search_url="http://duckduckgo.com/html?q=%s" # search_url="http://www.wikipedia.org/wiki/Special:Search?search=%s" # search_url="http://search.lycos.com/?query=%s" -# search_url="http://duckduckgo.com/html?q=%s" #search_url="http://www.google.com/search?ie=UTF-8&oe=UTF-8&q=%s" # If set, dillo will ask web servers to send pages in this language. diff --git a/src/dialog.cc b/src/dialog.cc index 7bde3dd2..85121c63 100644 --- a/src/dialog.cc +++ b/src/dialog.cc @@ -86,7 +86,8 @@ public: CustChoice (int x, int y, int w, int h, const char* l=0) : Fl_Choice(x,y,w,h,l) {}; int handle(int e) { - if (e == FL_KEYBOARD && Fl::event_key() == FL_Enter && + if (e == FL_KEYBOARD && + (Fl::event_key() == FL_Enter || Fl::event_key() == FL_Down) && (Fl::event_state() & (FL_SHIFT|FL_CTRL|FL_ALT|FL_META)) == 0) { MSG("CustChoice: ENTER\n"); return Fl_Choice::handle(FL_PUSH); @@ -160,14 +161,12 @@ const char *a_Dialog_input(const char *msg) int n_it = dList_length(prefs.search_urls); pm = new Fl_Menu_Item[n_it+1]; memset(pm, '\0', sizeof(Fl_Menu_Item[n_it+1])); - for (int i = 0; i < n_it; i++) { - char *p, *q, label[32]; - char *url = (char *)dList_nth_data(prefs.search_urls, i); - if ((p = strstr(url, "//")) && (q = strstr(p+2,"/"))) { - strncpy(label,p+2,MIN(q-p-2,31)); - label[MIN(q-p-2,31)] = 0; - } - pm[i].label(FL_NORMAL_LABEL, strdup(label)); + for (int i = 0, j = 0; i < n_it; i++) { + char *label, *url, *source; + source = (char *)dList_nth_data(prefs.search_urls, i); + if (a_Misc_parse_search_url(source, &label, &url) < 0) + continue; + pm[j++].label(FL_NORMAL_LABEL, strdup(label)); } } ch->tooltip("Select search engine"); diff --git a/src/misc.c b/src/misc.c index 213b0ada..ef64e875 100644 --- a/src/misc.c +++ b/src/misc.c @@ -382,6 +382,38 @@ int a_Misc_parse_geometry(char *str, int *x, int *y, int *w, int *h) return ret; } +/* + * Parse dillorc's search_url string ("[<label> ]<url>") + * Return value: -1 on error, 0 on success (and label and urlstr pointers) + */ +int a_Misc_parse_search_url(char *source, char **label, char **urlstr) +{ + static char buf[32]; + char *p, *q; + int ret = -1; + + if ((p = strrchr(source, ' '))) { + /* label and url pair */ + strncpy(buf,source,MIN(p-source,31)); + buf[MIN(p-source,31)] = 0; + source = p+1; + if ((p = strchr(source, '/')) && p[1] && (q = strchr(p+2,'/'))) { + *urlstr = source; + ret = 0; + } + } else { + /* url only, make a custom label */ + if ((p = strchr(source, '/')) && p[1] && (q = strchr(p+2,'/'))) { + strncpy(buf,p+2,MIN(q-p-2,31)); + buf[MIN(q-p-2,31)] = 0; + *urlstr = source; + ret = 0; + } + } + *label = buf; + return ret; +} + /* * Encodes string using base64 encoding. * Return value: new string or NULL if input string is empty. diff --git a/src/misc.h b/src/misc.h index 0b4eaaa5..75f0f78a 100644 --- a/src/misc.h +++ b/src/misc.h @@ -17,6 +17,7 @@ void a_Misc_parse_content_type(const char *str, char **major, char **minor, char **charset); int a_Misc_content_type_cmp(const char* ct1, const char *ct2); int a_Misc_parse_geometry(char *geom, int *x, int *y, int *w, int *h); +int a_Misc_parse_search_url(char *source, char **label, char **urlstr); char *a_Misc_encode_base64(const char *in); Dstr *a_Misc_file2dstr(const char *filename); diff --git a/src/uicmd.cc b/src/uicmd.cc index 0e0e4f88..1efcf845 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -36,6 +36,7 @@ #include "history.h" #include "msg.h" #include "prefs.h" +#include "misc.h" #include "dw/fltkviewport.hh" @@ -779,12 +780,15 @@ void a_UIcmd_open_file(void *vbw) */ static char *UIcmd_make_search_str(const char *str) { - char *search_url; + char *search_url, *l, *u, *c; char *keys = a_Url_encode_hex_str(str), - *c = (char*)dList_nth_data(prefs.search_urls, prefs.search_url_idx); + *src = (char*)dList_nth_data(prefs.search_urls, prefs.search_url_idx); Dstr *ds = dStr_sized_new(128); - for (; *c; c++) { + /* parse search_url into label and url */ + a_Misc_parse_search_url(src, &l, &u); + + for (c = u; *c; c++) { if (*c == '%') switch(*++c) { case 's': -- cgit v1.2.3 From 3d7044efae9e5fa7b4b6c0f9be4134b4cd51bfe9 Mon Sep 17 00:00:00 2001 From: corvid <corvid@lavabit.com> Date: Sun, 24 Jul 2011 19:16:17 +0000 Subject: typo --- src/uicmd.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/uicmd.cc') diff --git a/src/uicmd.cc b/src/uicmd.cc index 1efcf845..43dee783 100644 --- a/src/uicmd.cc +++ b/src/uicmd.cc @@ -775,7 +775,7 @@ void a_UIcmd_open_file(void *vbw) /* * Returns a newly allocated string holding a search url generated from - * a string of keywords (separarated by blanks) and the current search_url. + * a string of keywords (separated by blanks) and the current search_url. * The search string is urlencoded. */ static char *UIcmd_make_search_str(const char *str) -- cgit v1.2.3