/**
* \file combox.C
- * Copyright 1996-2002 The LyX Team.
* Copyright 1996Alejandro Aguilar Sierra
- * See the file COPYING.
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
*
* \author Alejandro Aguilar Sierra
+ *
+ * Full author contact details are available in file CREDITS
*/
/* A combination of two objects (a button and a browser) is encapsulated to
Combox::Combox(combox_type t)
- : type(t), tabfolder1(0), tabfolder2(0)
+ : type(t)
{
browser = button = 0;
callback = 0;
}
-void Combox::add(int x, int y, int w, int hmin, int hmax,
- FL_OBJECT * tabfolder1_, FL_OBJECT * tabfolder2_)
+void Combox::add(int x, int y, int w, int hmin, int hmax)
{
- // Store these for later use in working round an xforms bug in show()
- tabfolder1 = tabfolder1_;
- tabfolder2 = tabfolder2_;
-
FL_OBJECT * obj;
switch (type) {
fl_redraw_object(button);
}
- int x = label->x;
- int y = label->y + label->h;
- if (tabfolder1) {
- // This is a bug work around suggested by Steve Lamont on the
- // xforms mailing list. It correctly positions the browser form
- // after the main window has been moved.
- // The bug only occurs in tabbed folders.
- int folder_x, folder_y, folder_w, folder_h;
- fl_get_folder_area( tabfolder1,
- &folder_x, &folder_y,
- &folder_w, &folder_h);
- x += folder_x;
- y += folder_y;
-
- if (tabfolder2) {
- fl_get_folder_area( tabfolder2,
- &folder_x, &folder_y,
- &folder_w, &folder_h);
- x += tabfolder2->form->x + folder_x;
- y += tabfolder2->form->y + folder_y;
- } else {
- x += tabfolder1->form->x;
- y += tabfolder1->form->y;
- }
-
- } else {
- x += label->form->x;
- y += label->form->y;
+ // This fix ensures that, even if label lies on a tabfolder,
+ // the x,y coords of the underlying form are up to date.
+ // It should be rendered redundant by a similar fix in the
+ // tabfolder prehandler, but apparently "enter" events are not always
+ // caught...
+ // Angus 4 Oct, 2002.
+ if (label->form->window) {
+ FL_FORM * lf = label->form;
+ fl_get_winorigin(lf->window, &(lf->x), &(lf->y));
}
+ int const x = label->form->x + label->x;
+ int const y = label->form->y + label->y + label->h;
+
fl_set_form_position(form, x, y);
fl_show_form(form, FL_PLACE_POSITION, FL_NOBORDER, "");
if (sel > 0) {
XFlush(fl_get_display());
switch (keysym_return) {
case XK_Down:
+#ifdef XK_KP_Down
+ case XK_KP_Down:
+#endif
if (fl_get_browser(combo->browser) <
fl_get_browser_maxline(combo->browser))
fl_select_browser_line(combo->browser,
fl_get_browser(combo->browser));
return 1;
case XK_Up:
+#ifdef XK_KP_Up
+ case XK_KP_Up:
+#endif
if (fl_get_browser(combo->browser) > 1)
fl_select_browser_line(combo->browser,
fl_get_browser(combo->browser)-1);
fl_get_browser(combo->browser));
return 1;
case XK_Return:
+#ifdef XK_KP_Enter
+ case XK_KP_Enter:
+#endif
combo->hide();
return 1;
case XK_Escape: