Juergen Spitzmueller a écrit :
I needed the attached change to get it compile with gcc-4.1. Can I apply it?

Sure, go ahead.
Could you please also apply the two patches I sent yesterday? I have now a svn account but I haven't yet converted my repository. I attach them again, they should not clash with your patch.

The thing looks very good in general. Congratulations, Abdel.

Thanks :-)

I noticed the issues that Georg has already mentioned,

Which one?

and some minor stuff, which just needs polishing. I'll get back on this bit by bit.

You're very welcome!

Abdel.
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/ChangeLog
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/ChangeLog      
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/ChangeLog      
(working copy)
@@ -1,3 +1,15 @@
+2006-03-01  Abdelrazak Younes  <[EMAIL PROTECTED]>
+
+       * QWorkArea.[Ch] cleanup:
+       - Added private members workWidth_ and workHeight_ in order to
+         make sure QWorkArea is always able to draw (link to
+         workArea::WorkAreaResize).
+       - deleted superfluous debugging stuff
+       - deleted superfluous commented out code.
+       - placed all specific stuff (Qt-immodule, X11 and Mac OSX) in a
+         separate place at the end of QWorkArea.C.
+       - initial support for Wheel mouse (still does not work). 
+
 2006-03-10  Georg Baum  <[EMAIL PROTECTED]>
 
        * QWorkArea.C (getClipboard): convert MAC to UNIX line endings on OSX
@@ -7,6 +19,39 @@
 
        * add svn:ignore
 
+2006-03-01  Abdelrazak Younes  <[EMAIL PROTECTED]>
+
+       Initial Port to Qt4.
+    * UI files: they have all been ported to Qt4 format.
+       - With Qt4, uic generates a header only class that is not a Q_OBJECT.
+               => No more need to compile anything in the ui directory.
+               => No more need to moc the header
+       - Signal/slot connection to external method is no more supported. I have
+         transfered all the connections to the corresponding Dialog classes.
+       - xxxBase and xxxModule renamed to xxxUi
+       - Remaining issue: there's still an error with BulletsUI.ui
+
+       * Dialogs.
+       All the dialogs have been ported but there still some Q3xxx objects.
+       Remaining issues:
+       - qttableview use replaced with QTableWidget: Dragging the define the
+         table with the mouse is not implemented.
+       - QTocDialog ported to QTreeWidget but not yet fully functional.
+       - BulletModule not fully been ported and not functional.
+       - Wheel mouse support not functional
+       - Toolbars are always positioned at the top.
+
+       * Important rewrites:
+       - QContentPane merged with QWorkArea which derives from 
QAbstractScrollArea.
+       - QLPainter now use QPainter
+       - QLPopupmenu ported to QMenu.
+       - QtView ported to QMainWindow
+       - QLToolbar, QToc, QTocDialog, QPrefsDialog, QDocumentDialog...
+       - As Qt4 UI files do not define external signal/slot, I had to copy and
+         paste the code generated by former 'uic' in the *.C files into
+         corresponding Dialog classes. I think I have covered all connections 
but
+         this has to be verified.
+
 2005-12-14  Hartmut Haase  <[EMAIL PROTECTED]>
 
        * ui/QPrefLatexModule.ui: make the papersize choices in
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.C
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.C    
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.C    
(working copy)
@@ -11,6 +11,8 @@
 
 #include <config.h>
 
+#include <boost/current_function.hpp>
+
 #include "QWorkArea.h"
 #include "QLPainter.h"
 #include "QLyXKeySym.h"
@@ -34,26 +36,30 @@
 #include <QScrollBar>
 
 #include <boost/bind.hpp>
-
-#ifdef Q_WS_X11
+
+///////////////////////////////////////////////////////////////
+// Specific stuff
+#ifdef Q_OS_X11
 #include <X11/Xlib.h>
 #endif
 
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
 #include <Carbon/Carbon.h>
-#endif
+#include <support/lstrings.h>
+using lyx::support::subst;
+#endif
 
-#ifdef Q_OS_MAC
-#include <support/lstrings.h>
-
-using lyx::support::subst;
-#endif
+// You can find other qt-immodule, X11 and MACX specific stuff 
+// at the end of this file...
+///////////////////////////////////////////////////////////////
+
 using std::endl;
 using std::string;
 
 namespace os = lyx::support::os;
 
-namespace {
+namespace {
+
 QWorkArea const * wa_ptr = 0;
 
 /// return the LyX key state from Qt's
@@ -112,18 +118,10 @@
        : timeout(200), restart_timeout(true),
          x_old(-1), y_old(-1), scrollbar_value_old(-1.0)
 {}
+
 
-
-
-Painter & QWorkArea::getPainter() { return painter_; }
-
-//     QLPainter & QWorkArea::getQLPainter() { return painter_; }
-
-/// get the content pane widget
-QWidget * QWorkArea::getContent() const { return viewport(); }
-
 QWorkArea::QWorkArea(LyXView &, int w, int h)
-       : WorkArea(), QAbstractScrollArea(qApp->mainWidget()), painter_(this)
+       : QAbstractScrollArea(qApp->mainWidget()), WorkArea(), painter_(this)
 {
        setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
        setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
@@ -132,69 +130,70 @@
 
        setAcceptDrops(true);
 
-       setMinimumSize(100, 70);
-
-//     setBackgroundRole(lcolorcache.get(LColor::background));
-//     viewport()->setBackgroundRole(QPalette::Window);
+       setMinimumSize(100, 70);
+
        viewport()->setAutoFillBackground(false);
        viewport()->setAttribute(Qt::WA_OpaquePaintEvent);
 
        viewport()->setFocusPolicy(Qt::WheelFocus);
        viewport()->setFocus();
-//     viewport()->grabKeyboard();
-       setFocusPolicy(Qt::WheelFocus);
-       setFocusProxy(viewport());
+       setFocusPolicy(Qt::WheelFocus);
+
        viewport()->setCursor(Qt::IBeamCursor);
-
-       resize(w, h);
-       show();
-
-       scrolled_with_mouse_=false;
-       scrolled_with_keyboard_ = false;
-
+
+       resize(w, h);
+       show();
+       workWidth_ = w;
+       workHeight_ = h;
+
        synthetic_mouse_event_.timeout.timeout.connect(
                boost::bind(&QWorkArea::generateSyntheticMouseEvent,
                            this));
-/*
-       if ( !QObject::connect(&step_timer_, SIGNAL(timeout()),
-               this, SLOT(keyeventTimeout())) )
-                       lyxerr[Debug::GUI] << "ERROR: keyeventTimeout cannot 
connect!" << endl;
-*/
-
-       if ( !QObject::connect(verticalScrollBar(), 
SIGNAL(actionTriggered(int)),
-               this, SLOT(adjustViewWithScrollBar(int))) )
-                       lyxerr[Debug::GUI] << "ERROR: adjustViewWithScrollBar 
cannot connect!" << endl;
        
-#if USE_INPUT_METHODS
-       // to make qt-immodule work
-       setInputMethodEnabled(true);
-#endif
-#ifdef Q_WS_X11
-       // doubleClickInterval() is 400 ms on X11 witch is just too long.
-       // On Windows and Mac OS X, the operating system's value is used.
-       // On Microsoft Windows, calling this function sets the double
-       // click interval for all applications. So we don't!
-       QApplication::setDoubleClickInterval(300);
-#endif
-
-       // Start the timer, one-shot.
-       step_timer_.start(50, true);
-
-       //viewport()->resize(w, h);
-       pixmap_.reset(new QPixmap(viewport()->width(), viewport()->height()));
-
-       this->workAreaResize();
-       
+       // Initialize the vertical Scroll Bar
+       QObject::connect(verticalScrollBar(), SIGNAL(actionTriggered(int)),
+               this, SLOT(adjustViewWithScrollBar(int)));
+
+       // PageStep only depends on the viewport height.
+       verticalScrollBar()->setPageStep(workHeight_);  
+
        lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION
                << "\n Area width\t" << width()
                << "\n Area height\t" << height()
                << "\n viewport width\t" << viewport()->width()
                << "\n viewport height\t" << viewport()->height()
                << endl;
+
+/*
+       // This is the keyboard buffering stuff...
+       // I don't see any need for this under windows. The keyboard is reactive
+    // enough...
+
+       if ( !QObject::connect(&step_timer_, SIGNAL(timeout()),
+               this, SLOT(keyeventTimeout())) )
+                       lyxerr[Debug::GUI] << "ERROR: keyeventTimeout cannot 
connect!" << endl;
+
+       // Start the timer, one-shot.
+       step_timer_.start(50, true);
+*/
+
+       ///////////////////////////////////////////////////////////////////////
+       // Specific stuff goes here...
 
-//     this->QWidget::resize(w,h);
+#if USE_INPUT_METHODS
+       // to make qt-immodule work
+       setInputMethodEnabled(true);
+#endif
+
+#ifdef Q_OS_X11
+       // doubleClickInterval() is 400 ms on X11 witch is just too long.
+       // On Windows and Mac OS X, the operating system's value is used.
+       // On Microsoft Windows, calling this function sets the double
+       // click interval for all applications. So we don't!
+       QApplication::setDoubleClickInterval(300);
+#endif
 
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
        wa_ptr = this;
 #endif
 }
@@ -205,32 +204,13 @@
 
 void QWorkArea::setScrollbarParams(int h, int scroll_pos, int scroll_line_step)
 {
-       /*
-       if (scrolled_with_mouse_)
-       {
-               scrolled_with_mouse_=false;
-               return;
-       }
-       */
-
-       //if (scroll_pos_ == scroll_pos)
-       //{
-       //      verticalScrollBar()->triggerAction(QAbstractSlider::SliderMove);
-               int scroll_pos_ = scroll_pos;
-       //}
-       int scroll_line_step_ = scroll_line_step;
-       int scroll_page_step_ = viewport()->height();
-
        // do what cursor movement does (some grey)
        h += height() / 4;
        int scroll_max_ = std::max(0, h - height());
 
-       //scrolled_with_keyboard_=true;
-
        verticalScrollBar()->setRange(0, scroll_max_);
-       verticalScrollBar()->setSliderPosition(scroll_pos_);
-       verticalScrollBar()->setLineStep(scroll_line_step_);
-       verticalScrollBar()->setPageStep(scroll_page_step_);
+       verticalScrollBar()->setSliderPosition(scroll_pos);
+       verticalScrollBar()->setLineStep(scroll_line_step);
 }
 
 void QWorkArea::adjustViewWithScrollBar(int action)
@@ -245,98 +225,12 @@
                << endl;
 
        this->scrollDocView(verticalScrollBar()->sliderPosition());
-
-//     scrolled_with_mouse_ = true;
 }
 
-#ifdef Q_WS_X11
-bool lyxX11EventFilter(XEvent * xev)
-{
-       switch (xev->type) {
-       case SelectionRequest:
-               lyxerr[Debug::GUI] << "X requested selection." << endl;
-               if (wa_ptr)
-                       wa_ptr->selectionRequested();
-               break;
-       case SelectionClear:
-               lyxerr[Debug::GUI] << "Lost selection." << endl;
-               if (wa_ptr)
-                       wa_ptr->selectionLost();
-               break;
-       }
-       return false;
-}
-#endif
 
-#ifdef Q_WS_MACX
-namespace{
-OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent)
- {
-       DescType returnedType;
-       Size actualSize;
-       OSErr err = AEGetAttributePtr(&theAppleEvent, keyMissedKeywordAttr,
-                                     typeWildCard, &returnedType, nil, 0,
-                                     &actualSize);
-       switch (err) {
-       case errAEDescNotFound:
-               return noErr;
-       case noErr:
-               return errAEEventNotHandled;
-       default:
-               return err;
-       }
- }
-}
-
-pascal OSErr handleOpenDocuments(const AppleEvent* inEvent,
-                                AppleEvent* /*reply*/, long /*refCon*/)
-{
-       QString s_arg;
-       AEDescList documentList;
-       OSErr err = AEGetParamDesc(inEvent, keyDirectObject, typeAEList,
-                                  &documentList);
-       if (err != noErr)
-               return err;
-
-       err = checkAppleEventForMissingParams(*inEvent);
-       if (err == noErr) {
-               long documentCount;
-               err = AECountItems(&documentList, &documentCount);
-               for (long documentIndex = 1;
-                    err == noErr && documentIndex <= documentCount;
-                    documentIndex++) {
-                       DescType returnedType;
-                       Size actualSize;
-                       AEKeyword keyword;
-                       FSRef ref;
-                       char qstr_buf[1024];
-                       err = AESizeOfNthItem(&documentList, documentIndex,
-                                             &returnedType, &actualSize);
-                       if (err == noErr) {
-                               err = AEGetNthPtr(&documentList, documentIndex,
-                                                 typeFSRef, &keyword,
-                                                 &returnedType, (Ptr)&ref,
-                                                 sizeof(FSRef), &actualSize);
-                               if (err == noErr) {
-                                       FSRefMakePath(&ref, (UInt8*)qstr_buf,
-                                                     1024);
-                                       s_arg=QString::fromUtf8(qstr_buf);
-                                       wa_ptr->dispatch(
-                                               FuncRequest(LFUN_FILE_OPEN,
-                                                           fromqstr(s_arg)));
-                                       break;
-                               }
-                       }
-               } // for ...
-       }
-       AEDisposeDesc(&documentList);
-       return err;
-}
-#endif  // Q_WS_MACX
-
 void QWorkArea::haveSelection(bool own) const
 {
-       wa_ptr = this;
+       wa_ptr = this;
 
        if (!QApplication::clipboard()->supportsSelection())
                return;
@@ -355,24 +249,24 @@
        lyxerr[Debug::ACTION] << "getClipboard: " << (const char*) str << endl;
        if (str.isNull())
                return string();
-#ifdef Q_OS_MAC
-       // The MAC clipboard uses \r for lineendings, and we use \n
-       return subst(fromqstr(str), '\r', '\n');
-#else
+#ifdef Q_OS_MACX
+       // The MAC clipboard uses \r for lineendings, and we use \n
+       return subst(fromqstr(str), '\r', '\n');
+#else
        return fromqstr(str);
-#endif
+#endif
 }
 
 
 void QWorkArea::putClipboard(string const & str) const
 {
-#ifdef Q_OS_MAC
-       // The MAC clipboard uses \r for lineendings, and we use \n
-       QApplication::clipboard()->setText(toqstr(subst(str, '\n', '\r')),
-                                          QClipboard::Selection);
-#else
-       QApplication::clipboard()->setText(toqstr(str), QClipboard::Selection);
-#endif
+#ifdef Q_OS_MACX
+       // The MAC clipboard uses \r for lineendings, and we use \n
+       QApplication::clipboard()->setText(toqstr(subst(str, '\n', '\r')),
+                                          QClipboard::Selection);
+#else
+       QApplication::clipboard()->setText(toqstr(str), QClipboard::Selection);
+#endif
        lyxerr[Debug::ACTION] << "putClipboard: " << str << endl;
 }
 
@@ -402,49 +296,8 @@
                }
        }
 }
-/*
-void QWorkArea::scrollContentsBy(int dx, int dy)
-{      
-       lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION
-               << " scroll by dx=" << dx
-               << " dy=" << dy
-               << " verticalScrollBar val=" << verticalScrollBar()->value()
-               << " min=" << verticalScrollBar()->minimum()
-               << " max=" << verticalScrollBar()->maximum()
-               << " pagestep=" << verticalScrollBar()->pageStep()
-               << " linestep=" << verticalScrollBar()->lineStep()
-               << endl;
+
 
-       if (scrolled_with_keyboard_)
-       {
-               scrolled_with_keyboard_=false;
-               return;
-       }
-
-       this->scrollDocView(verticalScrollBar()->value());
-       scrolled_with_mouse_ = true;
-}
-*/
-
-#if USE_INPUT_METHODS
-// to make qt-immodule work
-
-void QWorkArea::inputMethodEvent(QInputMethodEvent * e) 
-{
-       QString const text = e->text();
-       if (!text.isEmpty()) {
-               int key = 0;
-               // needed to make math superscript work on some systems
-               // ideally, such special coding should not be necessary
-               if (text == "^")
-                       key = Qt::Key_AsciiCircum;
-               QKeyEvent ev(QEvent::KeyPress, key, *text.ascii(), 0, text);
-               keyPressEvent(&ev);
-       }
-       e->accept();
-}
-#endif
-
 void QWorkArea::mousePressEvent(QMouseEvent * e)
 {
        if (dc_event_.active && dc_event_ == *e) {
@@ -479,14 +332,14 @@
                              q_motion_state(e->state()));
 
        // If we're above or below the work area...
-       if (e->y() <= 20 || e->y() >= viewport()->QWidget::height() - 20) {
+       if (e->y() <= 20 || e->y() >= viewport()->height() - 20) {
                // Make sure only a synthetic event can cause a page scroll,
                // so they come at a steady rate:
                if (e->y() <= 20)
                        // _Force_ a scroll up:
                        cmd.y = -40;
                else
-                       cmd.y = viewport()->QWidget::height();
+                       cmd.y = viewport()->height();
                // Store the event, to be handled when the timeout expires.
                synthetic_mouse_event_.cmd = cmd;
 
@@ -536,9 +389,26 @@
 
 void QWorkArea::wheelEvent(QWheelEvent * e)
 {
-//     verticalScrollBar()->setValue(verticalScrollBar()->value() - 
e->delta());
+       verticalScrollBar()->setValue(verticalScrollBar()->value() - 
e->delta());
 }
 
+void QWorkArea::generateSyntheticMouseEvent()
+{
+       // Set things off to generate the _next_ 'pseudo' event.
+       if (synthetic_mouse_event_.restart_timeout)
+               synthetic_mouse_event_.timeout.start();
+
+       // Has anything changed on-screen since the last timeout signal
+       // was received?
+       double const scrollbar_value = verticalScrollBar()->value();
+       if (scrollbar_value != synthetic_mouse_event_.scrollbar_value_old) {
+               // Yes it has. Store the params used to check this.
+               synthetic_mouse_event_.scrollbar_value_old = scrollbar_value;
+
+               // ... and dispatch the event to the LyX core.
+               this->dispatch(synthetic_mouse_event_.cmd);
+       }
+}
 
 void QWorkArea::keyPressEvent(QKeyEvent * e)
 {
@@ -548,8 +418,7 @@
                << " isAutoRepeat=" << e->isAutoRepeat()
                << " key=" << e->key()
                << endl;
-
-       //viewport()->grabKeyboard();
+
 //     keyeventQueue_.push(boost::shared_ptr<QKeyEvent>(new QKeyEvent(*e)));
 
     boost::shared_ptr<QLyXKeySym> sym(new QLyXKeySym);
@@ -558,25 +427,7 @@
  
 }
 
-void QWorkArea::generateSyntheticMouseEvent()
-{
-       // Set things off to generate the _next_ 'pseudo' event.
-       if (synthetic_mouse_event_.restart_timeout)
-               synthetic_mouse_event_.timeout.start();
-
-       // Has anything changed on-screen since the last timeout signal
-       // was received?
-       double const scrollbar_value = verticalScrollBar()->value();
-       if (scrollbar_value != synthetic_mouse_event_.scrollbar_value_old) {
-               // Yes it has. Store the params used to check this.
-               synthetic_mouse_event_.scrollbar_value_old = scrollbar_value;
-
-               // ... and dispatch the event to the LyX core.
-               this->dispatch(synthetic_mouse_event_.cmd);
-       }
-}
-
-
+// This is not used for now...
 void QWorkArea::keyeventTimeout()
 {
        bool handle_autos = true;
@@ -629,37 +480,161 @@
 
 
 void QWorkArea::resizeEvent(QResizeEvent * resizeEvent)
-{
+{
+       workWidth_ = viewport()->width();
+       workHeight_ = viewport()->height();
+
+       verticalScrollBar()->setPageStep(viewport()->height());
+
        pixmap_.reset(new QPixmap(viewport()->width(), viewport()->height()));
 
-       scrolled_with_mouse_=false;
-       scrolled_with_keyboard_=false;
-
        this->workAreaResize();
 
        lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION
-               << "\n QWidget width\t" << viewport()->width()
-               << "\n QWidget height\t" << viewport()->height()
+               << "\n QWidget width\t" << this->QWidget::width()
+               << "\n QWidget height\t" << this->QWidget::height()
+               << "\n viewport width\t" << viewport()->width()
+               << "\n viewport height\t" << viewport()->height()
                << "\n QResizeEvent rect left\t" << rect().left()
                << "\n QResizeEvent rect right\t" << rect().right()
                << endl;
 }
 
 void QWorkArea::paintEvent(QPaintEvent * e)
-{
-/*
+{
        lyxerr[Debug::GUI] << BOOST_CURRENT_FUNCTION
-               << "\n QWidget width\t" << viewport()->width()
-               << "\n QWidget height\t" << viewport()->height()
+               << "\n QWidget width\t" << this->width()
+               << "\n QWidget height\t" << this->height()
+               << "\n viewport width\t" << viewport()->width()
+               << "\n viewport height\t" << viewport()->height()
+               << "\n pixmap width\t" << pixmap_->width()
+               << "\n pixmap height\t" << pixmap_->height()
                << "\n QPaintEvent x\t" << e->rect().x()
-               << "\n QPaintEvent y\t" << e->rect().x()
+               << "\n QPaintEvent y\t" << e->rect().y()
                << "\n QPaintEvent w\t" << e->rect().width()
                << "\n QPaintEvent h\t" << e->rect().height()
                << endl;
-*/
+
        QPainter q(viewport());
        q.drawPixmap(e->rect(), *pixmap_.get(), e->rect());
-
-//     q.drawPixmap(QPoint(r.x(), r.y()),
-//             *pixmap_.get(), r);
 }
+
+
+///////////////////////////////////////////////////////////////
+///////////////////////////////////////////////////////////////
+// Specific stuff
+
+////////////////////////////////////////////////////////////////////////
+// qt-immodule specific stuff goes here...
+
+#if USE_INPUT_METHODS
+// to make qt-immodule work
+
+void QWorkArea::inputMethodEvent(QInputMethodEvent * e) 
+{
+       QString const text = e->text();
+       if (!text.isEmpty()) {
+               int key = 0;
+               // needed to make math superscript work on some systems
+               // ideally, such special coding should not be necessary
+               if (text == "^")
+                       key = Qt::Key_AsciiCircum;
+               QKeyEvent ev(QEvent::KeyPress, key, *text.ascii(), 0, text);
+               keyPressEvent(&ev);
+       }
+       e->accept();
+}
+#endif
+
+
+////////////////////////////////////////////////////////////////////////
+// X11 specific stuff goes here...
+
+#ifdef Q_WS_X11
+bool lyxX11EventFilter(XEvent * xev)
+{
+       switch (xev->type) {
+       case SelectionRequest:
+               lyxerr[Debug::GUI] << "X requested selection." << endl;
+               if (wa_ptr)
+                       wa_ptr->selectionRequested();
+               break;
+       case SelectionClear:
+               lyxerr[Debug::GUI] << "Lost selection." << endl;
+               if (wa_ptr)
+                       wa_ptr->selectionLost();
+               break;
+       }
+       return false;
+}
+#endif
+
+
+////////////////////////////////////////////////////////////////////////
+// Mac OSX specific stuff goes here...
+
+#ifdef Q_OS_MACX
+namespace{
+OSErr checkAppleEventForMissingParams(const AppleEvent& theAppleEvent)
+ {
+       DescType returnedType;
+       Size actualSize;
+       OSErr err = AEGetAttributePtr(&theAppleEvent, keyMissedKeywordAttr,
+                                     typeWildCard, &returnedType, nil, 0,
+                                     &actualSize);
+       switch (err) {
+       case errAEDescNotFound:
+               return noErr;
+       case noErr:
+               return errAEEventNotHandled;
+       default:
+               return err;
+       }
+ }
+}
+
+pascal OSErr handleOpenDocuments(const AppleEvent* inEvent,
+                                AppleEvent* /*reply*/, long /*refCon*/)
+{
+       QString s_arg;
+       AEDescList documentList;
+       OSErr err = AEGetParamDesc(inEvent, keyDirectObject, typeAEList,
+                                  &documentList);
+       if (err != noErr)
+               return err;
+
+       err = checkAppleEventForMissingParams(*inEvent);
+       if (err == noErr) {
+               long documentCount;
+               err = AECountItems(&documentList, &documentCount);
+               for (long documentIndex = 1;
+                    err == noErr && documentIndex <= documentCount;
+                    documentIndex++) {
+                       DescType returnedType;
+                       Size actualSize;
+                       AEKeyword keyword;
+                       FSRef ref;
+                       char qstr_buf[1024];
+                       err = AESizeOfNthItem(&documentList, documentIndex,
+                                             &returnedType, &actualSize);
+                       if (err == noErr) {
+                               err = AEGetNthPtr(&documentList, documentIndex,
+                                                 typeFSRef, &keyword,
+                                                 &returnedType, (Ptr)&ref,
+                                                 sizeof(FSRef), &actualSize);
+                               if (err == noErr) {
+                                       FSRefMakePath(&ref, (UInt8*)qstr_buf,
+                                                     1024);
+                                       s_arg=QString::fromUtf8(qstr_buf);
+                                       wa_ptr->dispatch(
+                                               FuncRequest(LFUN_FILE_OPEN,
+                                                           fromqstr(s_arg)));
+                                       break;
+                               }
+                       }
+               } // for ...
+       }
+       AEDisposeDesc(&documentList);
+       return err;
+}
+#endif  // Q_OS_MACX
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.h
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.h    
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QWorkArea.h    
(working copy)
@@ -94,10 +94,7 @@
 /**
  * Qt-specific implementation of the work area
  * (buffer view GUI)
- *
- * It consists of a content pane widget, and a scrollbar.
- * Hopefully soon we can just use QScrollView ...
- */
+*/
 class QWorkArea : public QAbstractScrollArea, public WorkArea {
 
        Q_OBJECT
@@ -108,48 +105,49 @@
 
        virtual ~QWorkArea();
        /// return the width of the content pane
-       virtual int workWidth() const { return viewport()->width(); }
+       virtual int workWidth() const { return workWidth_; }
+
        /// return the height of the content pane
-       virtual int workHeight() const { return viewport()->height(); }
+       virtual int workHeight() const { return workHeight_; }
        ///
        virtual void setScrollbarParams(int height, int pos, int line_height);
 
        /// a selection exists
-       virtual void haveSelection(bool) const;
+       virtual void haveSelection(bool) const;
+
        ///
        virtual std::string const getClipboard() const;
+       
        ///
        virtual void putClipboard(std::string const &) const;
+       
        ///
        virtual void dragEnterEvent(QDragEnterEvent * event);
+       
        ///
-       virtual void dropEvent(QDropEvent* event);
+       virtual void dropEvent(QDropEvent* event);
        
        /// return the widget's painter
-       virtual Painter & getPainter();
+       virtual Painter & getPainter() { return (Painter &) painter_; }
 
-       //virtual QPaintDevice & paintDevice() { return content_->pixmap(); }
+       ///
+       //virtual QPaintDevice & paintDevice() { return content_->pixmap(); }
+
        /// return the backing pixmap
-       QPixmap * pixmap() const { return pixmap_.get(); }
+       QPixmap * pixmap() const { return pixmap_.get(); }
 
-       /// return the widget's painter
-//     virtual QLPainter & getQLPainter();
+       /// return the widget's painter
+       //virtual QLPainter & getQLPainter() const { return painter_; }
 
        /// get the content pane widget
-       QWidget * getContent() const;
+       QWidget * getContent() const  { return viewport(); }
 
-
-
 protected:
-       
-//     void scrollContentsBy(int dx, int dy);
 
        /// repaint part of the widget
        void paintEvent(QPaintEvent * e);
-
        /// widget has been resized
        void resizeEvent(QResizeEvent * e);
-
        /// mouse button press
        void mousePressEvent(QMouseEvent * e);
        /// mouse button release
@@ -164,6 +162,7 @@
        void keyPressEvent(QKeyEvent * e);
 
 #if USE_INPUT_METHODS
+protected:
        /// IM events
        void QWorkArea::inputMethodEvent(QInputMethodEvent * e) 
 #endif
@@ -173,11 +172,13 @@
        void keyeventTimeout();
        void adjustViewWithScrollBar(int action);
 
-protected:
-
-
-private:
-
+private:
+
+       /// 
+       int workWidth_;
+       ///
+       int workHeight_;
+
        /// our painter
        QLPainter painter_;
 
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/lyx_gui.C
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/lyx_gui.C      
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/lyx_gui.C      
(working copy)
@@ -160,7 +160,6 @@
 
        static LQApplication app(argc, argv);
 
-#if QT_VERSION >= 0x030200
        // install translation file for Qt built-in dialogs
        // These are only installed since Qt 3.2.x
        static QTranslator qt_trans(0);
@@ -176,9 +175,8 @@
                lyxerr[Debug::GUI]
                        << "Could not find  Qt translations for locale "
                        << QTextCodec::locale() << std::endl;
-#endif
 
-#ifdef Q_WS_MACX
+/*#ifdef Q_WS_MACX
        // These translations are meant to break Qt/Mac menu merging
        // algorithm on some entries. It lists the menu names that
        // should not be moved to the LyX menu
@@ -194,7 +192,7 @@
 
        app.installTranslator(&aqua_trans);
 #endif
-
+*/
        using namespace lyx::graphics;
 
        Image::newImage = boost::bind(&QLImage::newImage);
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLMenubar.C
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLMenubar.C    
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLMenubar.C    
(working copy)
@@ -1,5 +1,5 @@
 /**
- * \file qt2/QLMenubar.C
+ * \file qt4/QLMenubar.C
  * This file is part of LyX, the document processor.
  * Licence details can be found in the file COPYING.
  *
@@ -21,16 +21,9 @@
 #include "support/lstrings.h"
 
 #include "MenuBackend.h"
-#include "support/lstrings.h"
 
 #include "debug.h"
 
-#ifdef Q_WS_MACX
-#include "kbmap.h"
-#include "QLyXKeySym.h"
-extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
-#endif
-
 #include <QMenuBar>
 #include <QCursor>
 
@@ -156,8 +149,8 @@
 */
 QMenuBar * QLMenubar::menuBar() const
 {
-#ifdef Q_WS_MAC
-       return menubar_.get();
+#ifdef Q_OS_MACX
+       return mac_menubar_.get();
 #else
        return owner_->menuBar();
 #endif
@@ -165,14 +158,14 @@
 
 void QLMenubar::macxMenuBarInit()
 {
-#ifdef Q_WS_MACX
-       menubar_ = new QMenuBar;
+#ifdef Q_OS_MACX
+       mac_menubar_.reset(new QMenuBar);
 
        // this is the name of the menu that contains our special entries
        menubackend_.specialMenu("LyX");
        // make sure that the special entries are added to the first
        // menu even before this menu has been opened.
-       name_map_[menubackend_.getMenubar().begin()->submenuname()]->showing();
+       name_map_[menubackend_.getMenubar().begin()->submenuname()]->update();
 #endif
 }
 
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLMenubar.h
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLMenubar.h    
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLMenubar.h    
(working copy)
@@ -15,12 +15,14 @@
 
 #include "frontends/Menubar.h"
 
-#include <map>
+#include <map>
+#include <boost/scoped_ptr.hpp>
 
 #include <QObject>
+#include <QMenuBar>
 
-class QMenuBar;
-class QMenu;
+#include "QLPopupMenu.h"
+
 class LyXView;
 class MenuBackend;
 class Menu;
@@ -58,7 +60,7 @@
 //     void updateMenu();
 
 private:
-       /// Initialize specific MACOS X menubar
+       /// Initialize specific MACOS X menubar.
        void QLMenubar::macxMenuBarInit();
 
        /// owning view
@@ -67,14 +69,13 @@
        /// menu controller
        MenuBackend & menubackend_;
 
-       typedef std::map<std::string, QMenu *> NameMap;
+       typedef std::map<std::string, QLPopupMenu *> NameMap;
 
        /// name to menu for openByName
        NameMap name_map_;
 
-#ifdef Q_WS_MACX
-       boost::scoped_ptr<QMenuBar> menubar_;
-#endif
+       /// MACOS X special menubar.
+       boost::scoped_ptr<QMenuBar> mac_menubar_;
 };
 
 } // namespace frontend
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLPainter.C
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLPainter.C    
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLPainter.C    
(working copy)
@@ -265,7 +265,7 @@
 
        QString str;
        str.setLength(ls);
-       for (size_t i = 0; i < ls; ++i)
+       for (int i = 0; i < ls; ++i)
                // Brain-dead MSVC wants at(i) rather than operator[]
                str[i] = QChar(encoding->ucs(s[i]));
        // HACK: QT3 refuses to show single compose characters
Index: D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLPopupMenu.C
===================================================================
--- D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLPopupMenu.C  
(revision 13339)
+++ D:/msys/home/yns/src/lyx-svn/trunk/src/frontends/qt4/QLPopupMenu.C  
(working copy)
@@ -10,7 +10,9 @@
  */
 
 #include <config.h>
-
+
+#include <boost/current_function.hpp>
+
 // Qt defines a macro 'signals' that clashes with a boost namespace.
 // All is well if the namespace is visible first.
 #include "QtView.h"
@@ -26,7 +28,7 @@
 #include "debug.h"
 
 
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
 #include "kbmap.h"
 #include "QLyXKeySym.h"
 extern boost::scoped_ptr<kb_keymap> toplevel_keymap;
@@ -145,7 +147,7 @@
 /// \todo Mac specific binding handling.
 void QLPopupMenu::addBinding(string & label, MenuItem const & mi)
 {
-#ifndef Q_WS_MACX
+#ifndef Q_OS_MACX
 
                string const binding(mi.binding());
                if (!binding.empty()) {
@@ -175,7 +177,7 @@
 /// \todo Fix Mac specific menu hack
 void QLPopupMenu::specialMacXmenuHack()
 {
-#ifdef Q_WS_MACX
+#ifdef Q_OS_MACX
        /* The qt/mac menu code has a very silly hack that
           moves some menu entries that it recognizes by name
           (e.g. "Preferences...") to the "LyX" menu. This

Reply via email to