mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-27 03:36:39 +00:00
* create global menubar on Mac without a parent. It will be shown if no GuiView exists.
* fill global menubar with the normal actions * capture the keyboard on the menubar if no GuiView exists. This enables the shortcuts on Mac in those cases. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@23731 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
fda541d46a
commit
d63821939c
@ -878,6 +878,11 @@ bool LyX::init()
|
|||||||
// read, therefore it can't be done by a static object.
|
// read, therefore it can't be done by a static object.
|
||||||
ConverterCache::init();
|
ConverterCache::init();
|
||||||
|
|
||||||
|
// init the global menubar on Mac. This must be done after the session
|
||||||
|
// was recovered to know the "last files".
|
||||||
|
if (use_gui)
|
||||||
|
theApp()->initGlobalMenu();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -219,6 +219,11 @@ public:
|
|||||||
*/
|
*/
|
||||||
virtual void readMenus(Lexer & lex) = 0;
|
virtual void readMenus(Lexer & lex) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* initialize the global menubar on Mac
|
||||||
|
*/
|
||||||
|
virtual void initGlobalMenu() = 0;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add a callback for socket read notification
|
* add a callback for socket read notification
|
||||||
* @param fd socket descriptor (file/socket/etc)
|
* @param fd socket descriptor (file/socket/etc)
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
|
|
||||||
#include "qt_helpers.h"
|
#include "qt_helpers.h"
|
||||||
#include "GuiImage.h"
|
#include "GuiImage.h"
|
||||||
|
#include "GuiKeySymbol.h"
|
||||||
#include "GuiView.h"
|
#include "GuiView.h"
|
||||||
|
|
||||||
#include "frontends/alert.h"
|
#include "frontends/alert.h"
|
||||||
@ -121,6 +122,27 @@ public:
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
class GlobalMenuBar : public QMenuBar
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
///
|
||||||
|
GlobalMenuBar() : QMenuBar(0) {}
|
||||||
|
|
||||||
|
///
|
||||||
|
bool event(QEvent * e)
|
||||||
|
{
|
||||||
|
if (e->type() == QEvent::ShortcutOverride) {
|
||||||
|
// && activeWindow() == 0) {
|
||||||
|
QKeyEvent * ke = static_cast<QKeyEvent*>(e);
|
||||||
|
KeySymbol sym;
|
||||||
|
setKeySymbol(&sym, ke);
|
||||||
|
theLyXFunc().processKeySym(sym, q_key_state(ke->modifiers()));
|
||||||
|
e->accept();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////
|
||||||
// You can find more platform specific stuff
|
// You can find more platform specific stuff
|
||||||
@ -132,7 +154,7 @@ GuiApplication * guiApp;
|
|||||||
|
|
||||||
|
|
||||||
GuiApplication::GuiApplication(int & argc, char ** argv)
|
GuiApplication::GuiApplication(int & argc, char ** argv)
|
||||||
: QApplication(argc, argv), Application(), current_view_(0)
|
: QApplication(argc, argv), Application(), current_view_(0), global_menubar_(0)
|
||||||
{
|
{
|
||||||
QString app_name = "LyX";
|
QString app_name = "LyX";
|
||||||
QCoreApplication::setOrganizationName(app_name);
|
QCoreApplication::setOrganizationName(app_name);
|
||||||
@ -146,6 +168,9 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
|
|||||||
if (lyxrc.quit_on_last_window_closed)
|
if (lyxrc.quit_on_last_window_closed)
|
||||||
setQuitOnLastWindowClosed(false);
|
setQuitOnLastWindowClosed(false);
|
||||||
*/
|
*/
|
||||||
|
#ifdef Q_WS_MAC
|
||||||
|
setQuitOnLastWindowClosed(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Q_WS_X11
|
#ifdef Q_WS_X11
|
||||||
// doubleClickInterval() is 400 ms on X11 which is just too long.
|
// doubleClickInterval() is 400 ms on X11 which is just too long.
|
||||||
@ -175,11 +200,10 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
|
|||||||
<< fromqstr(language_name));
|
<< fromqstr(language_name));
|
||||||
|
|
||||||
#ifdef Q_WS_MACX
|
#ifdef Q_WS_MACX
|
||||||
// all windows in a Mac application share the same menu bar.
|
|
||||||
QMenuBar *menuBar = new QMenuBar(0);
|
|
||||||
// This allows to translate the strings that appear in the LyX menu.
|
// This allows to translate the strings that appear in the LyX menu.
|
||||||
addMenuTranslator();
|
addMenuTranslator();
|
||||||
#endif
|
#endif
|
||||||
|
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(onLastWindowClosed()));
|
||||||
|
|
||||||
using namespace lyx::graphics;
|
using namespace lyx::graphics;
|
||||||
|
|
||||||
@ -210,6 +234,14 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
|
|||||||
connect(&general_timer_, SIGNAL(timeout()),
|
connect(&general_timer_, SIGNAL(timeout()),
|
||||||
this, SLOT(handleRegularEvents()));
|
this, SLOT(handleRegularEvents()));
|
||||||
general_timer_.start();
|
general_timer_.start();
|
||||||
|
|
||||||
|
#ifdef Q_WS_MACX
|
||||||
|
if (global_menubar_ == 0) {
|
||||||
|
// Create the global default menubar which is shown for the dialogs
|
||||||
|
// and if no GuiView is visible.
|
||||||
|
global_menubar_ = new GlobalMenuBar();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -697,6 +729,19 @@ bool GuiApplication::searchMenu(FuncRequest const & func,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GuiApplication::initGlobalMenu()
|
||||||
|
{
|
||||||
|
if (global_menubar_)
|
||||||
|
menus().fillMenuBar(global_menubar_, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void GuiApplication::onLastWindowClosed()
|
||||||
|
{
|
||||||
|
if (global_menubar_)
|
||||||
|
global_menubar_->grabKeyboard();
|
||||||
|
}
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////
|
||||||
// X11 specific stuff goes here...
|
// X11 specific stuff goes here...
|
||||||
#ifdef Q_WS_X11
|
#ifdef Q_WS_X11
|
||||||
|
@ -39,6 +39,7 @@ namespace frontend {
|
|||||||
|
|
||||||
class GuiView;
|
class GuiView;
|
||||||
class LyXView;
|
class LyXView;
|
||||||
|
class GlobalMenuBar;
|
||||||
class GuiWorkArea;
|
class GuiWorkArea;
|
||||||
class SocketNotifier;
|
class SocketNotifier;
|
||||||
|
|
||||||
@ -72,6 +73,7 @@ public:
|
|||||||
virtual std::string const hexName(ColorCode col);
|
virtual std::string const hexName(ColorCode col);
|
||||||
virtual void updateColor(ColorCode col);
|
virtual void updateColor(ColorCode col);
|
||||||
virtual void readMenus(Lexer & lex);
|
virtual void readMenus(Lexer & lex);
|
||||||
|
virtual void initGlobalMenu();
|
||||||
virtual void registerSocketCallback(int fd, SocketCallback func);
|
virtual void registerSocketCallback(int fd, SocketCallback func);
|
||||||
void unregisterSocketCallback(int fd);
|
void unregisterSocketCallback(int fd);
|
||||||
bool searchMenu(FuncRequest const & func, std::vector<docstring> & names) const;
|
bool searchMenu(FuncRequest const & func, std::vector<docstring> & names) const;
|
||||||
@ -87,7 +89,7 @@ public:
|
|||||||
|
|
||||||
/// Create the main window with given geometry settings.
|
/// Create the main window with given geometry settings.
|
||||||
/// \param geometry_arg: only for Windows platform.
|
/// \param geometry_arg: only for Windows platform.
|
||||||
void createView(QString const & geometry_arg);
|
void createView(QString const & geometry_arg = QString());
|
||||||
///
|
///
|
||||||
GuiView const * currentView() const { return current_view_; }
|
GuiView const * currentView() const { return current_view_; }
|
||||||
///
|
///
|
||||||
@ -128,6 +130,8 @@ private Q_SLOTS:
|
|||||||
void socketDataReceived(int fd);
|
void socketDataReceived(int fd);
|
||||||
/// events to be triggered by general_timer_ should go here
|
/// events to be triggered by general_timer_ should go here
|
||||||
void handleRegularEvents();
|
void handleRegularEvents();
|
||||||
|
///
|
||||||
|
void onLastWindowClosed();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
///
|
///
|
||||||
@ -171,6 +175,8 @@ public:
|
|||||||
/// This LyXView is the one receiving Clipboard and Selection
|
/// This LyXView is the one receiving Clipboard and Selection
|
||||||
/// events
|
/// events
|
||||||
GuiView * current_view_;
|
GuiView * current_view_;
|
||||||
|
/// only used on mac
|
||||||
|
GlobalMenuBar * global_menubar_;
|
||||||
}; // GuiApplication
|
}; // GuiApplication
|
||||||
|
|
||||||
extern GuiApplication * guiApp;
|
extern GuiApplication * guiApp;
|
||||||
|
Loading…
Reference in New Issue
Block a user