]> git.lyx.org Git - lyx.git/blobdiff - src/frontends/xforms/FeedbackController.C
ws fixes, formatting and some other small changes
[lyx.git] / src / frontends / xforms / FeedbackController.C
index 4f04a250810f160143f5bf066d33b86ef1985e97..01dcc2bf29e083844916663ace4b0bc1942ad734 100644 (file)
@@ -1,9 +1,11 @@
 /**
  * \file FeedbackController.C
- * Copyright 2002 the LyX Team
- * Read the file COPYING
+ * This file is part of LyX, the document processor.
+ * Licence details can be found in the file COPYING.
  *
- * \author Angus Leeming, a.leeming@ic.ac.uk
+ * \author Angus Leeming 
+ *
+ * Full author contact details are available in file CREDITS
  */
 
 /* A common interface for posting feedback messages to a message widget in
@@ -22,7 +24,7 @@
 #include "gettext.h"        // _()
 #include "xforms_helpers.h" // formatted
 #include "support/LAssert.h"
-
+#include FORMS_H_LOCATION
 
 FeedbackController::FeedbackController()
        : warning_posted_(false), message_widget_(0)
@@ -47,7 +49,7 @@ void FeedbackController::MessageCB(FL_OBJECT * ob, int event)
        lyx::Assert(ob);
 
        switch (event) {
-       case FL_ENTER: 
+       case FL_ENTER:
        {
                string const feedback = getFeedback(ob);
                if (feedback.empty() && warning_posted_)
@@ -56,7 +58,7 @@ void FeedbackController::MessageCB(FL_OBJECT * ob, int event)
                warning_posted_ = false;
                postMessage(getFeedback(ob));
                break;
-       } 
+       }
 
        case FL_LEAVE:
                if (!warning_posted_)
@@ -71,10 +73,29 @@ void FeedbackController::MessageCB(FL_OBJECT * ob, int event)
 
 void FeedbackController::PrehandlerCB(FL_OBJECT * ob, int event, int key)
 {
-       if (event == FL_PUSH && key == 2 && ob->objclass == FL_INPUT) {
+       lyx::Assert(ob);
+
+       if (ob->objclass == FL_INPUT && event == FL_PUSH && key == 2) {
                // Trigger an input event when pasting in an xforms input object
                // using the middle mouse button.
                InputCB(ob, 0);
+               
+       } else if (ob->objclass == FL_TABFOLDER &&
+                  (event == FL_ENTER || event == FL_LEAVE)) {
+               // This prehandler is used to work-around an xforms bug and
+               // ensures that the form->x, form->y coords of the active
+               // tabfolder are up to date.
+
+               // The tabfolder itself can be very narrow, being just
+               // the visible border to the tabs.
+               // We thus use both FL_ENTER and FL_LEAVE as flags,
+               // in case the FL_ENTER event is not caught.
+
+               FL_FORM * const folder = fl_get_active_folder(ob);
+               if (folder && folder->window) {
+                       fl_get_winorigin(folder->window,
+                                        &(folder->x), &(folder->y));
+               }
 
        } else if (message_widget_ &&
                   (event == FL_ENTER || event == FL_LEAVE)) {
@@ -88,9 +109,7 @@ void FeedbackController::PrehandlerCB(FL_OBJECT * ob, int event, int key)
 void FeedbackController::postWarning(string const & warning)
 {
        warning_posted_ = true;
-
-       string const str = _("WARNING! ") + warning;
-       postMessage(str);
+       postMessage(warning);
 }
 
 
@@ -106,9 +125,8 @@ void FeedbackController::clearMessage()
                return;
 
        // This trick is needed to get xforms to clear the label...
-       fl_hide_object(message_widget_);
        fl_set_object_label(message_widget_, "");
-       fl_show_object(message_widget_);
+       fl_hide_object(message_widget_);
 }
 
 
@@ -116,10 +134,18 @@ void FeedbackController::postMessage(string const & message)
 {
        lyx::Assert(message_widget_);
 
-       string const str = formatted(message,
-                                    message_widget_->w-10, FL_SMALL_SIZE);
+       string str;
+       if (warning_posted_)
+               str = _("WARNING! ") + message;
+       else
+               str = message;
+
+       str = formatted(str, message_widget_->w-10, FL_SMALL_SIZE);
 
        fl_set_object_label(message_widget_, str.c_str());
        FL_COLOR const label_color = warning_posted_ ? FL_TOMATO : FL_BLACK;
        fl_set_object_lcol(message_widget_, label_color);
+
+       if (!message_widget_->visible)
+               fl_show_object(message_widget_);
 }