Compare commits

..

No commits in common. "18c310a8cf60ebc8cab27aeea6fc0a6e1fcc7fcc" and "3bc4554e5762c3484477e1c590632756e3f310ad" have entirely different histories.

4 changed files with 66 additions and 27 deletions

View File

@ -217,15 +217,31 @@ AC_DEFUN([QT_DO_IT_ALL],
fi;; fi;;
esac esac
dnl Specific support for X11 will be built if these are available
AC_CHECK_HEADERS([xcb/xcb.h])
AC_CHECK_LIB([xcb], [xcb_send_event])
save_CPPFLAGS=$CPPFLAGS save_CPPFLAGS=$CPPFLAGS
CPPFLAGS="$save_CPPFLAGS $QT_CORE_INCLUDES" CPPFLAGS="$save_CPPFLAGS $QT_CORE_INCLUDES"
AC_CHECK_HEADER(QtGui/qtgui-config.h, AC_CHECK_HEADER(QtGui/qtgui-config.h,
[lyx_qt_config=QtGui/qtgui-config.h], [lyx_qt_config=QtGui/qtgui-config.h],
[lyx_qt_config=qconfig.h]) [lyx_qt_config=qconfig.h])
AC_MSG_CHECKING([whether Qt uses the X Window system])
if test x$USE_QT6 = xyes ; then
dnl FIXME: Check whether defining QPA_XCB makes sense with Qt6
AC_PREPROC_IFELSE([AC_LANG_SOURCE([
[#include <$lyx_qt_config>]
[#if !defined(QT_FEATURE_xcb) || QT_FEATURE_xcb < 0]
[#error Fail]
[#endif]])],
[AC_MSG_RESULT(yes)
AC_DEFINE(QPA_XCB, 1, [Define if Qt uses the X Window System])],
[AC_MSG_RESULT(no)])
else
AC_EGREP_CPP(xcb,
[#include <$lyx_qt_config>
QT_QPA_DEFAULT_PLATFORM_NAME],
[AC_MSG_RESULT(yes)
AC_DEFINE(QPA_XCB, 1, [Define if Qt uses the X Window System])],
[AC_MSG_RESULT(no)])
fi
CPPFLAGS=$save_CPPFLAGS CPPFLAGS=$save_CPPFLAGS
QT_FIND_TOOL([QT_MOC], [moc]) QT_FIND_TOOL([QT_MOC], [moc])

View File

@ -127,6 +127,8 @@ namespace {
string cl_system_support; string cl_system_support;
string cl_user_support; string cl_user_support;
string geometryArg;
LyX * singleton_ = nullptr; LyX * singleton_ = nullptr;
void showFileError(string const & error) void showFileError(string const & error)
@ -609,7 +611,7 @@ void LyX::execCommands()
} }
// create the first main window // create the first main window
lyx::dispatch(FuncRequest(LFUN_WINDOW_NEW)); lyx::dispatch(FuncRequest(LFUN_WINDOW_NEW, geometryArg));
if (!pimpl_->files_to_load_.empty()) { if (!pimpl_->files_to_load_.empty()) {
// if some files were specified at command-line we assume that the // if some files were specified at command-line we assume that the
@ -1340,6 +1342,20 @@ int parse_import(string const & type, string const & file, string & batch)
} }
int parse_geometry(string const & arg1, string const &, string &)
{
geometryArg = arg1;
#if !defined(QPA_XCB)
// don't remove "-geometry", it will be pruned out later in the
// frontend if need be.
return -1;
#else
// but that is only done if QPA_XCB is not defined.
return 1;
#endif
}
int parse_batch(string const &, string const &, string &) int parse_batch(string const &, string const &, string &)
{ {
use_gui = false; use_gui = false;
@ -1417,6 +1433,7 @@ void LyX::easyParse(int & argc, char * argv[])
cmdmap["--export-to"] = parse_export_to; cmdmap["--export-to"] = parse_export_to;
cmdmap["-i"] = parse_import; cmdmap["-i"] = parse_import;
cmdmap["--import"] = parse_import; cmdmap["--import"] = parse_import;
cmdmap["-geometry"] = parse_geometry;
cmdmap["-batch"] = parse_batch; cmdmap["-batch"] = parse_batch;
cmdmap["-f"] = parse_force; cmdmap["-f"] = parse_force;
cmdmap["--force-overwrite"] = parse_force; cmdmap["--force-overwrite"] = parse_force;
@ -1429,10 +1446,6 @@ void LyX::easyParse(int & argc, char * argv[])
cmdmap["--ignore-error-message"] = parse_ignore_error_message; cmdmap["--ignore-error-message"] = parse_ignore_error_message;
for (int i = 1; i < argc; ++i) { for (int i = 1; i < argc; ++i) {
// Let Qt handle -geometry even when not on X11.
if (from_utf8(argv[i]) == "-geometry")
argv[i] = const_cast<char *>("-qwindowgeometry");
map<string, cmd_helper>::const_iterator it map<string, cmd_helper>::const_iterator it
= cmdmap.find(argv[i]); = cmdmap.find(argv[i]);

View File

@ -121,7 +121,7 @@
#include <QThreadPool> #include <QThreadPool>
#include <QWidget> #include <QWidget>
#ifdef HAVE_XCB_XCB_H #if defined(QPA_XCB)
#include <xcb/xcb.h> #include <xcb/xcb.h>
#ifdef HAVE_QT5_X11_EXTRAS #ifdef HAVE_QT5_X11_EXTRAS
#include <QtX11Extras/QX11Info> #include <QtX11Extras/QX11Info>
@ -172,6 +172,20 @@ namespace lyx {
frontend::Application * createApplication(int & argc, char * argv[]) frontend::Application * createApplication(int & argc, char * argv[])
{ {
#if !defined(QPA_XCB)
// prune -geometry argument(s) by shifting
// the following ones 2 places down.
for (int i = 0 ; i < argc ; ++i) {
if (strcmp(argv[i], "-geometry") == 0) {
int const remove = (i+1) < argc ? 2 : 1;
argc -= remove;
for (int j = i; j < argc; ++j)
argv[j] = argv[j + remove];
--i;
}
}
#endif
#if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN) #if defined(Q_OS_WIN) || defined(Q_CYGWIN_WIN)
// On Windows, allow bringing the LyX window to top // On Windows, allow bringing the LyX window to top
AllowSetForegroundWindow(ASFW_ANY); AllowSetForegroundWindow(ASFW_ANY);
@ -1157,14 +1171,10 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
// Install Qt native translator for GUI elements. // Install Qt native translator for GUI elements.
installTranslator(&d->qt_trans_); installTranslator(&d->qt_trans_);
if (platformName() == "xcb") { #ifdef QPA_XCB
#if defined(HAVE_XCB_XCB_H) && defined(HAVE_LIBXCB) // Enable reception of XCB events.
// Enable reception of XCB events. installNativeEventFilter(this);
installNativeEventFilter(this);
#else
LYXERR0("Warning: X11 support is incomplete in this LyX binary.");
#endif #endif
}
// FIXME: quitOnLastWindowClosed is true by default. We should have a // FIXME: quitOnLastWindowClosed is true by default. We should have a
// lyxrc setting for this in order to let the application stay resident. // lyxrc setting for this in order to let the application stay resident.
@ -1185,13 +1195,13 @@ GuiApplication::GuiApplication(int & argc, char ** argv)
this, SLOT(onApplicationStateChanged(Qt::ApplicationState))); this, SLOT(onApplicationStateChanged(Qt::ApplicationState)));
#endif #endif
if (platformName() == "xcb") { #if defined(QPA_XCB)
// doubleClickInterval() is 400 ms on X11 which is just too long. // doubleClickInterval() is 400 ms on X11 which is just too long.
// On Windows and Mac OS X, the operating system's value is used. // On Windows and Mac OS X, the operating system's value is used.
// On Microsoft Windows, calling this function sets the double // On Microsoft Windows, calling this function sets the double
// click interval for all applications. So we don't! // click interval for all applications. So we don't!
QApplication::setDoubleClickInterval(300); QApplication::setDoubleClickInterval(300);
} #endif
connect(this, SIGNAL(lastWindowClosed()), this, SLOT(onLastWindowClosed())); connect(this, SIGNAL(lastWindowClosed()), this, SLOT(onLastWindowClosed()));
@ -3502,7 +3512,7 @@ bool GuiApplication::longOperationStarted() {
// //
// X11 specific stuff goes here... // X11 specific stuff goes here...
#if defined(HAVE_XCB_XCB_H) && defined(HAVE_LIBXCB) #if defined(QPA_XCB)
bool GuiApplication::nativeEventFilter(const QByteArray & eventType, bool GuiApplication::nativeEventFilter(const QByteArray & eventType,
void * message, QINTPTR *) void * message, QINTPTR *)
{ {

View File

@ -20,7 +20,7 @@
#include <QApplication> #include <QApplication>
#include <QList> #include <QList>
#if defined(HAVE_XCB_XCB_H) && defined(HAVE_LIBXCB) #ifdef QPA_XCB
#include <QAbstractNativeEventFilter> #include <QAbstractNativeEventFilter>
#endif #endif
@ -53,7 +53,7 @@ There should be only one instance of this class. No Qt object
initialisation should be done before the instantiation of this class. initialisation should be done before the instantiation of this class.
*/ */
class GuiApplication : public QApplication, public Application class GuiApplication : public QApplication, public Application
#if defined(HAVE_XCB_XCB_H) && defined(HAVE_LIBXCB) #ifdef QPA_XCB
, public QAbstractNativeEventFilter , public QAbstractNativeEventFilter
#endif #endif
{ {
@ -121,7 +121,7 @@ public:
//@{ //@{
bool notify(QObject * receiver, QEvent * event) override; bool notify(QObject * receiver, QEvent * event) override;
void commitData(QSessionManager & sm); void commitData(QSessionManager & sm);
#if defined(HAVE_XCB_XCB_H) && defined(HAVE_LIBXCB) #if defined(QPA_XCB)
#if (QT_VERSION < 0x060000) #if (QT_VERSION < 0x060000)
#define QINTPTR long #define QINTPTR long
#else #else