summaryrefslogtreecommitdiff
path: root/vcl
AgeCommit message (Collapse)Author
2024-12-08Drop vcl/win/gdi/dw-extra.h after baseline bumpIlmari Lauhakangas
Change-Id: Ib303b35837fd73cc3dea77e5095f6d00c9dfa1bb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178082 Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com> Tested-by: Jenkins Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org>
2024-12-08Remove Windows 7, 8 and 8.1 from driver blocklist codeIlmari Lauhakangas
Change-Id: If3138b9b603c21a9cc6fedc08a7db144fb9f00ac Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178077 Reviewed-by: Ilmari Lauhakangas <ilmari.lauhakangas@libreoffice.org> Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-08tdf#130857 qt weld: Implement QtInstanceTreeView::selected_foreachMichael Weghorn
This gets used in the "Tools" -> "XML Filter Settings" dialog in Writer when selecting multiple rows in the tree view, then clicking the "Save as Package" button. The result with SAL_VCL_QT_USE_WELDED_WIDGETS=1 and the qt6 VCL plugin in XMLFilterSettingsDialog::onSave looks as expected with this change in place (variables `aFilters` and `nFilters` contain the selected filters and total count of these when observed with a breakpoint after the call to `m_xFilterListBox->selected_foreach`). The method still triggers an assert later in a WIP branch where support for that dialog is declared, because `QtInstanceWindow::GetXWindow` is called, but not implemented yet. Change-Id: Iab47f391106132b5a6ee03fd2ad1902d493c0999 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178070 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-08tdf#130857 qt weld: Add tree view iter and implement some methodsMichael Weghorn
Add a new QtInstanceTreeIter struct as the weld::TreeIter implementaton for QtInstanceTreeView. It uses the QModelIndex of the item it points to. Add QtInstanceTreeView::modelIndex helper methods to convert both, an int row index and a QtInstanceTreeIter to a QModelIndex. This can be used to deduplicate code when (re)implementing the methods that have two variants that either take an int row index or a TreeIter input param. For QtInstanceTreeView::get_id, add a new variant that takes a QModelIndex and move the existing logic from the implementation for the int param there and reuse it to implemetnat the variant taking a TreeIter param as well. Implement a few more methods taking or returning a weld::TreeIter. Change-Id: I0508ad14a43214faccc6a3cba208400031bb231c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178069 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-08tdf#130857 qt weld: Implement QtInstanceTreeView::removeMichael Weghorn
Side note: In Writer's "Tool" > "XML Filter Settings" dialog, trying to always delete the first entry works 3 times (when using a fresh profile), but doing it again after then doesn't remove the entry from the treeview, but the entry is still gone when closing and reopening the dialog. That's the same with gtk3 however, weld::TreeView::remove doesn't get called. So it's not a problem in the weld::TreeView implementations, but probably in XMLFilterSettingsDialog or some other underlying logic. Change-Id: Ic91b3d1d62b66574b9e0710b17b2d9606d27a0fb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178068 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-08tdf#130857 qt weld: Report selected tree view row only onceMichael Weghorn
Now that support for multiple columns has been implemented in QtInstanceTreeView, iterating over all selected model indices and appending their row index to the vector results in the row being appended once fore each column of the selected row. (Index seen twice in `aRows` in XMLFilterSettingsDialog::updateStates while debugging another issue in the "Tools" > "XML Filter Settings" dialog with the qt6 VCL plugin and SAL_VCL_QT_USE_WELDED_WIDGETS=1). Use QItemSelectionModel::selectedRows (with the default column index of 0) instead of QItemSelectionModel::selectedIndexes to prevent that. Change-Id: Ic8caa299549d954ed844c39c4b2ba957edf2b404 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178067 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-08tdf#130857 qt weld: Fix incorrect param order for row/colMichael Weghorn
In QtInstanceTreeView::get_id, the nPos param is the row number, but was incorrectly passed as the second parameter to QStandardItemModel::index [1] which is for the column. Swap the params to fix that. Passing incorrectly would trigger a crash in a WIP branch for Writer's "Tools" -> "XML Filter Settings" dialog when clicking on the second row, as the ID data is only set for the item in the first, not the second column, so `pInfo` in XMLFilterSettingsDialog::updateStates would be null. Backtrace: 1 XMLFilterSettingsDialog::updateStates xmlfiltersettingsdialog.cxx 183 0x7f3eb862194e 2 XMLFilterSettingsDialog::SelectionChangedHdl_Impl xmlfiltersettingsdialog.cxx 153 0x7f3eb8621859 3 XMLFilterSettingsDialog::LinkStubSelectionChangedHdl_Impl xmlfiltersettingsdialog.cxx 151 0x7f3eb861e8cd 4 Link<weld::TreeView&, void>::Call link.hxx 111 0x7f3eeb997aa1 5 weld::TreeView::signal_selection_changed weld.hxx 989 0x7f3eeb99733c 6 QtInstanceTreeView::handleSelectionChanged QtInstanceTreeView.cxx 781 0x7f3eeb98cb2d 7 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *)::{lambda()#1}::operator()() const qobjectdefs_impl.h 127 0x7f3eeb998141 8 QtPrivate::FunctorCallBase::call_internal<void, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *)::{lambda()#1}>(void * *, QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *)::{lambda()#1}&&) qobjectdefs_impl.h 65 0x7f3eeb998079 9 QtPrivate::FunctorCall<std::integer_sequence<unsigned long>, QtPrivate::List<>, void, void (QtInstanceTreeView:: *)()>::call(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *) qobjectdefs_impl.h 126 0x7f3eeb997fab 10 QtPrivate::FunctionPointer<void (QtInstanceTreeView:: *)()>::call<QtPrivate::List<>, void>(void (QtInstanceTreeView:: *)(), QtInstanceTreeView *, void * *) qobjectdefs_impl.h 174 0x7f3eeb997f2d 11 QtPrivate::QCallableObject<void (QtInstanceTreeView:: *)(), QtPrivate::List<>, void>::impl(int, QtPrivate::QSlotObjectBase *, QObject *, void * *, bool *) qobjectdefs_impl.h 545 0x7f3eeb997e56 12 QtPrivate::QSlotObjectBase::call qobjectdefs_impl.h 461 0x7f3eeaa5ce22 13 doActivate<false> qobject.cpp 4139 0x7f3eeab1c644 14 QMetaObject::activate qobject.cpp 4199 0x7f3eeab121b3 15 QMetaObject::activate<void, QItemSelection, QItemSelection> qobjectdefs.h 306 0x7f3eeaf93da5 16 QItemSelectionModel::selectionChanged moc_qitemselectionmodel.cpp 390 0x7f3eeaf85b76 17 QItemSelectionModel::emitSelectionChanged qitemselectionmodel.cpp 2029 0x7f3eeaf87a2f 18 QItemSelectionModel::select qitemselectionmodel.cpp 1372 0x7f3eeaf872f9 19 QTreeViewPrivate::select qtreeview.cpp 4016 0x7f3ee906f2ec 20 QTreeView::setSelection qtreeview.cpp 2393 0x7f3ee906eaae ... <More> Change-Id: Icf6b3004ab95991da69c0ff86201421d620aaa43 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178066 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-08tdf#130857 qt weld: Evaluate button box orientationMichael Weghorn
Set orientation to vertical if that's specified in the .ui file instead of using the default of horizontal. This is used by the button box on the right hand side of the "Tools" -> "XML Filter Settings" dialog. Change-Id: I64460037649dcd24897c7a5d7148430836702edc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178064 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-08tdf#130857 qt weld: Set tree view column header titleMichael Weghorn
Make the `extractTitle` helper function used by VclBuilder a static method in the BuilderBase base class for reuse by QtBuilder. In QtBuilder::makeObject, when encountering a "GtkTreeViewColumn" object, add a new column to the QTreeView and set the column title in the underlying model using QStandardItemModel::setHeaderData. Return the parent (tree view). (Returning no object would cause WidgetBuilder::handleObject to call WidgetBuilder::insertObject again, and thus result in every column being processed twice, i.e. the double amount of columns would be inserted). Adjust QtInstanceTreeView::clear to no longer call QStandardItemModel::clear [1], as that would not only remove the "actual" items, but also the header items, i.e. the column titles would get lost as well. Remove all rows instead. With this in place, the tree view in Writer's "Tool" -> "XML Filter Settings" dialog has the correct data + title set on open in a WIP branch where support for that dialog is declared in QtInstanceBuilder. (Other aspects in the dialog still need to be addressed however.) [1] https://doc.qt.io/qt-6/qstandarditemmodel.html#clear Change-Id: I59956c007ed73cddb299ad2374afd88199ddc94d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178063 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-08tdf#130857 qt weld: Implement QtInstanceTreeView::columns_autosizeMichael Weghorn
QTreeView::resizeColumnToContents [1] looks like the Qt equivalent for GTK's gtk_tree_view_columns_autosize [2]. [1] https://doc.qt.io/qt-6/qtreeview.html#resizeColumnToContents [2] https://docs.gtk.org/gtk3/method.TreeView.columns_autosize.html Change-Id: I4771896fb932834f51fa48ceaa3557181f474fcc Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178062 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-08tdf#130857 qt weld: Implement QtInstanceTreeView::set_textMichael Weghorn
For now, require that the actual column index is passed. The weld::TreeView::set_text doc mentions // col index -1 sets the first text column , but that is not supported yet, so assert a different index is passed for now. Revisit when implementing support for a dialog that actually makes use of this. Change-Id: I8ba6e965ba22542bf3151548200b92c8c6b085d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178061 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-07Drop pre-Win10 code from WinSkiaSalGraphicsImplMike Kaganski
Introduced in commit a1b18eba354dc773c214fc3b7ee92c3473ec4a5e (Implement Custom Font Collections on pre-Windows 10 systems, 2024-08-20). Change-Id: I2aa16ae560d4dad8489e13289ad79d8be349b6b1 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178031 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-07Drop support for Windows versions prior to Windows 10Mike Kaganski
Now when version 25.8 is in development, and the drop of legacy Windows versions was announced in release notes. Change-Id: Iefda63a29cafe40aec78d149067bdd7a3f20cffb Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178025 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-07tdf#130857 qt weld: Implement getting/setting cursorMichael Weghorn
This is independent of the selection. (For selection, there is weld::TreeView::select and weld::TreeView::get_selected_index instead.) Change-Id: I3698a080cebaf4411740b0e7a95c54743e84d881 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178024 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-07weld: Rename weld::Treeview selection signal/connectMichael Weghorn
Rename weld::TreeView member + methods to clarify that these are about selection changes: * m_aChangeHdl to m_aSelectionChangedHdl, * signal_changed to signal_selection_changed * connect_changed to connect_selection_changed In GtkInstanceTreeview, also rename the related methods calling signal_selection_changed accordingly for consistency. Change-Id: I299d7930484677395a0bdd0ff105df18688f2e04 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178023 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-06increase rtf2pdffuzzer max_lenCaolán McNamara
Change-Id: I99b48a7b38c8a53f6908137bfa3e4cee0231c4d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/178015 Tested-by: Caolán McNamara <caolan.mcnamara@collabora.com> Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-12-06tdf#130857 qt weld: Support printer properties dialogMichael Weghorn
Declare support for the "Insert Breaks" "File" -> Printer Settings" -> "Properties" dialog. This means that native Qt widgets are used for that dialog now when using the qt5 or qt6 VCL plugin and starting LO with environment variable SAL_VCL_QT_USE_WELDED_WIDGETS=1 set. Since this dialog contains tab pages, their .ui files need to be declared as supported as well. Change-Id: Ia4360eebf3fed6ab5f78510c866a1703b0db8998 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177923 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-06tdf#130857 qt weld: Return selected item when requested in callbackMichael Weghorn
The current item and the selected item(s) are not necessarily the same. Looking into the gtk and VCL implementations, weld::TreeView::signal_changed is called when the selection (not the current item) changes, so connect to the QItemSelectionModel::selectionChanged signal instead of the QItemSelectionModel::currentChanged one in the Qt implementation. At the point in time that the QItemSelectionModel::selectionChanged signal gets emitted, QItemSelectionModel::selectedIndexes returns the newly selected indices while that was not yet the case with QItemSelectionModel::currentChanged. For the "Device" tab in the "File" -> "Printer Settings" -> "Properties" dialog (for which support will be added in an upcoming commit), this resulted in the PPD values (in the tree view on the right) not being shown for the actually selected PPD option/key (in the left tree view), but for the one selected previously. (See RTSDevicePage::SelectHdl for the logic filling the tree view with items, which gets triggered when weld::TreeView::signal_changed gets called.) Change-Id: I31ec5aaaa47cd3d4704f25086b24645fb708be0a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177922 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-06vcl: make Color parameters const in BitmapEx::createAlphaBlendFrame()Christopher Sherlock
Change-Id: I6d71552f4d5004477b5980fe6c8de710dd4aea9d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177565 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-06tdf#164106 Fix reordered glyph positioning with split grapheme clustersJonathan Clark
Due to formatting, grapheme clusters can possibly be split across multiple layouts. Layouts containing split grapheme clusters are created by laying out the complete string, and extracting only the necessary glyphs based on source codepoint index. This approach is good enough for most diacritic cases, but it cannot handle certain substitution cases where glyphs with advances would be interleaved with other layouts. Sub-layouts must be contiguous. This change introduces code to disable grapheme cluster splitting in these cases that cannot be handled correctly. Change-Id: I122abbf9c3f8a5efa4c72ad47991d0ad9ff8a8c0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177927 Tested-by: Jenkins Reviewed-by: Jonathan Clark <jonathan@libreoffice.org>
2024-12-06tdf#130857 qt weld: Implement QtInstanceTreeView::clearMichael Weghorn
Used e.g. in RTSDevicePage::FillValueBox (i.e. in the "File" -> "Printer Settings" -> "Properties" dialog). Change-Id: Ice39b266b366a6fd6b37b6ece28cee529990dc80 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177909 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-05jsdialog: weld::MenuSzymon Kłos
- weld::Menu doesn't have base with weld::Widget - use separate container, only one menu per WindowId - first only send menu and cancel, when user activates option we will send another request and execute entry as menu can be blocking - there is connect_activated way of async setup too Change-Id: Iea03f82a91ecc19af67b91f85364675c119056ea Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177722 (cherry picked from commit efeb511607dacce991866bcf328c96a01ab594f9) Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177852 Tested-by: Jenkins Reviewed-by: Szymon Kłos <szymon.klos@collabora.com>
2024-12-05vcl: Return reference in SalFrame::GetSystemDataMichael Weghorn
... instead of a pointer, to make clear that this is always non-null. Change-Id: I4c8676913b2507f077d8a66973ab5f95e73cb497 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177886 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05vcl: Return reference in SalObject::GetSystemDataMichael Weghorn
... instead of a pointer, to make clear that this is always non-null. Change-Id: Ic0f92e672b08494cf3bfaa9a956cb78170bc1ad5 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177885 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05tdf#164093 tdf#157001 a11y: Improve menu window disposalMichael Weghorn
In MenuFloatingWindow::dispose, unset the accessible before calling the base class implementation, to prevent the accessible from getting disposed there as well. This is necessary because the MenuFloatingWindow doesn't create (and therefore own) its accessible object, but returns that from its menu in MenuFloatingWindow::CreateAccessible. Therefore, the PopupMenu as the owner is responsible for disposing the accessible as well, not the MenuFloatingWindow. This logic was already implemented in Menu::dispose, but that doesn't help in cases where the MenuFloatingWindow gets disposed independently. In Menu::dispose, drop the extra logic and just call `m_pWindow.disposeAndClear` so that MenuFloatingWindow::dispose can take care of everything that's needed. (For the MenuBar case, MenuBar::dispose calls MenuBar::ImplDestroy, which unsets Menu::m_pWindow, so other than for PopupMenu, this change to MenuBar::ImplDestroy method doesn't make a difference for that class.) Don't dispose the current Menu::m_pWindow in PopupMenu::FinishRun, but instead in PopupMenu::ImplExecute (if set) before assigning a new one, to ensure that the old one gets disposed. Drop the SAL_WARN_IF(GetWindow(), "vcl", "Win?!"); because that case is handled fine now. Without this change in place, I saw that warning getting triggered while debugging (potentially because PopupMenu::FinishRun never got reached as the menu didn't show, maybe due to switching focus to the IDE when reaching a breakpoint or different timing,...). This commit by itself doesn't yet fix the crash from tdf#164093 seen on Windows with NVDA running because the menu's accessible still incorrectly gets disposed by the MenuFloatingWindow's VCLXWindow (toolkit window peer). That will be addressed in a separate commit. Change-Id: Ia2931bee23204395e8b3396927acf4fa1d0f077c Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177883 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05vcl a11y: Use comphelper::disposeComponentMichael Weghorn
Change-Id: Ifc63db272484e9a7986e6113989f2f6274f40349 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177846 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05gtk4: GtkIconView doesn't have convert_widget_to_bin_window_coordsCaolán McNamara
but still has the same problem as the gtk3 iconview with reporting positions when scrolled a problem since: commit a36a58933a1e07d3f54bacd5c2fe8ca53063a63a CommitDate: Wed Dec 4 07:40:30 2024 +0100 sd: convert sidebar masterpage panels from drawingview to iconview Change-Id: Ice549b40d88c5d2063e37ccb63490e3537736d39 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177855 Tested-by: Jenkins Reviewed-by: Caolán McNamara <caolan.mcnamara@collabora.com>
2024-12-05tdf#162750 sw: Fix layout with small caps inside ligaturesJonathan Clark
Previously, Writer was not correctly terminating layout contexts at the starts of small caps spans. This could cause incorrect character placement in certain cases. Regression since: Commit 30d376fb7ded4c96c85ad1112a0e44b5929657c9 "tdf#61444 Correct Writer text layout across formatting changes" and Commit ab0a4543cab77ae0c7c0a79feb8aebab71163dd7 "tdf#124116 Correct Writer text shaping across formatting changes" Change-Id: I863b9b66356eb0a9efb5bbdc75e80b43d56aaaf0 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177839 Reviewed-by: Jonathan Clark <jonathan@libreoffice.org> Tested-by: Jenkins
2024-12-05tdf#130857 qt weld: Notify when receiving/losing focusMichael Weghorn
In QtInstanceWidget, connect to the QApplication::focusChanged signal [1] and when either the old or the new focus widget is the one belonging to this QtInstanceWidget, notify about the lost/gained focus. With this in place, SvxSearchDialog::FocusHdl_Impl now gets called in a WIP branch where support for the "Find and Replace" dialog is declared when moving focus into one of the comboboxes in that dialog. [1] https://doc.qt.io/qt-6/qapplication.html#focusChanged Change-Id: I15190cf9b0d2e72d78a57f58da7ff2ebd1e7a6d9 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177835 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05weld: Add weld::Widget::signal_* methods to call handlersMichael Weghorn
Similar to what already exists in most subclasses, add signal_<event_name> methods to call the handlers and use these in the subclasses instead of calling the handlers directly. Change-Id: I6b79ddd859b360e947d97ada57f1573a276d6177 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177834 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05tdf#130857 qt weld: Let QtInstanceWidget derive from QObjectMichael Weghorn
Also add Q_OBJECT macros for all subclasses that didn't have them and run moc for them, too. Change-Id: Ia42ee7d02b68d54df308d33c88bf286468bfa68f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177833 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-05tdf#130857 qt weld: Implement QtInstanceWidget::get_extents_relative_toMichael Weghorn
This e.g. gets called when pressing the "Find Next" button in the "Find and Replace" dialog. Change-Id: I30e33d52d19b0afe44564486bfa79e3b500ae856 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177832 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05tdf#130857 qt weld: Signal combobox text changeMichael Weghorn
As the comment for weld::ComboBox::connect_changed (in vcl/include/weld.hxx) says: /* m_aChangeHdl is called when the active item is changed. The can be due to the user selecting a different item from the list or while typing into the entry of a combo box with an entry. Use changed_by_direct_pick() to discover whether an item was actually explicitly selected, e.g. from the menu. */ void connect_changed(const Link<ComboBox&, void>& rLink) { m_aChangeHdl = rLink; } QComboBox::currentIndexChanged is not emitted while typing in an editable combobox, so connect to the QComboBox::editTextChanged signal in addition. Also, hold the SolarMutex when calling the signal handler. QtInstanceComboBox::changed_by_direct_pick isn't implemented yet, but would trigger an assert when called, so this doesn't go unnoticed at least. Witht this commit in change, typing in the "Find" combobox in the "Find and Replace" dialog in a WIP branch declaring support for that dialog now results in the buttons getting enabled or disabled as expected (disabled when text is empty, enabled when non-empty). Change-Id: I9b89b3a3c8b5ed7ebdeda7b486bdbf2f7e54fd86 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177831 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05tdf#130857 qt weld: Hold SolarMutex when signalling checkbox toggleMichael Weghorn
Not doing so would e.g. trigger an assert when toggling the "Match case" checkbox in the "Find and Replace" dialog in a WIP branch where support for that dialog with native widgets is declared. Change-Id: I5dc95e81e81bceaf258ecba6e55dfa280dfdd572 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177830 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05tdf#130857 qt weld: Implement QtInstanceComboBox::set_entry_message_typeMichael Weghorn
Reuse the logic previously implemented in QtInstanceEntry::set_message_type by moving it to a static helper method that takes a QLineEdit* param, and for QtInstanceComboBox::set_entry_message_type, pass the combo box's line edit. Change-Id: I8e81c9473da294d2a8c863ed143d735c30ade2a2 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177829 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05tdf#130857 qt weld: Implement QtInstanceWindow::{g,s}et_window_stateMichael Weghorn
Map to/from what looks like the corresponding QWidget equivalents. No explicit testing done. Change-Id: I47152c8789223372c49ea60f774d0a04a64db2b7 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177828 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-05tdf#130857 qt weld: Implement QtInstanceWindow::get_{size,position}Michael Weghorn
These are needed e.g. for the "Find and Replace" dialog. Use the QWidget::geometry property [1] for now. An alternative to consider might be QWidget::frameGeometry [2]. At least on Wayland, screen positions are not available anyway, however. [1] https://doc.qt.io/qt-6/qwidget.html#geometry-prop [2] https://doc.qt.io/qt-6/qwidget.html#frameGeometry-prop Change-Id: I2449d8be688c17a4abb58ba424c966dde0e30e26 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177827 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-05tdf#130857 qt weld: Implement QtInstanceWidget::set_backgroundMichael Weghorn
Used e.g. by the "Find and Replace" dialog (Ctrl+H). Change-Id: Ie181eea1600616ddb6a8044864df221ac4bb108d Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177826 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-05vcl: move variables closer to first usageChristopher Sherlock
Change-Id: Ib09f054eca56d55ba6b91c8e2377f373fc615430 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177808 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-04a11y: Move menu a11y classes to vcl, no more use factoryMichael Weghorn
Other than most of the a11y implementations for vcl classes, VCLXAccessiblePopupMenu etc. do not make use of any VCLXWindow (i.e. UNO/toolkit wrapper of a vcl::Window) and thus do not depend on the toolkit module, which the accessibility module depends on. Therefore, there's also no need to use the accessible factory to create them (which is needed when toolkit classes are involved to avoid a dependency cycle). Move those classes from the accessibility module to vcl and add a new method Menu::CreateAccessible and move the logic from AccessibleFactory::createAccessible there. Drop the now unnecessary factory methods previously used for those classes. No change in behavior intended (yet), but this also simplifies the code involved for the tdf#164093 scenario. Change-Id: Ie3f6f1a02bf6662206d31383473cdc868e1f9164 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177812 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04Move helpers for css::awt/VCL point/rect/size to vcl::unohelperMichael Weghorn
Move helpers to convert between the Rectangle, Point and Size classes in vcl and in css::awt from VCLUnoHelper (in the toolkit module) to vcl::unohelper (in the vcl module), for reuse in vcl in upcoming commits. Change-Id: I7b11c8a6b8c843a01ce25b1e4c0fb1869ad1e6ee Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177816 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04a11y: Move CharacterAttributeshelper from accessibility to vclMichael Weghorn
This is in preparation of moving more from the accessibility module to vcl. Currently, the a11y implementations for vcl widgets are implemented in the accessibility module (in directory of the same name), which in turn depends on the toolkit module. To break the dependency cycle (vcl needs accessibility to create a11y objects for its widgets), there's a UNO service. At least some a11y classes don't really need toolkit, however, so the plan is to decouple this and move those from the accessibility module into vcl in upcoming commits. Change-Id: I6aeee104f271c804c85727002822b89a9263628f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177810 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins
2024-12-04[API CHANGE] a11y: Drop XAccessibleExtendedComponent::getFontMichael Weghorn
This method from the unpublished XAccessibleExtendedComponent interface is not used by any of the a11y platform bridges, and I don't know of any platform a11y API that would need it. In order to report character/font attributes, there is the XAccessibleText interface and its XAccessiText::getCharacterAttributes method instead, which actually gets used by the platform a11y bridges. Therefore, drop this method to simplify code, and also decouple the accessibility module a bit further from the toolkit module without having to reorganize code further. (VCLXFont from the toolkit module currently gets used in various implementations.) Change-Id: I06ea3cc5998a13927b3f869877b28f03ac07c89b Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177809 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04vcl: fix call sites for createBlendFrame(), rename to createAlphaBlendFrame()Christopher Sherlock
The call sites are actually passing in transparency, in fact to be consistent with current conventions we are actually dealing with alpha values. So we need to take the transparent values at the call sites and convert to alpha values by just subtracting 255. Hence fixing the FIXME comment. Change-Id: Ibc55ea77f469ec8afcab0cc26d2b8cdf25ea8a72 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/173858 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04Disable subpixel AA in GraphicExporter::filter unconditionallyMike Kaganski
... in D2DWriteTextOutRenderer. Commit 785a56b6be7f3128c2e7a131381e02525a50eb6b (D2DWriteTextOutRenderer: use grayscale AA for file output, 2024-11-27) has disabled it only when the export settings explicitly specified a concrete AA setting. In case when the settings didn't specify explicitly, if AA should be used or not, then system settings were used, which in case of D2DWriteTextOutRenderer would still enable ClearType (subpixel AA). This stores additional flag in StyleSettings, similar to what was done in commit e6538f5bdd876911ea30f84a6512c03908e620fd (tdf#118966 vcl: add a flag to determine if AA of fonts is used from the system, 2018-07-28), that tells the renderer to prevent subpixel AA, even if use of AA itself is defined by system settings. This flag is currently only considered by D2DWriteTextOutRenderer. Change-Id: Ibd1879d3c222276eee00c37a442881d6d47c831f Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177780 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-04gtk4: Unbreak --enable-gtk4 buildMichael Weghorn
gtk_icon_view_convert_widget_to_bin_window_coords was dropped in gtk commit [1] commit 8dc5e13e8c66cd260edff17dbaa10eedcc95ae1b Author: Timm Bäder <mail@baedert.org> Date: Tue Jun 27 11:11:57 2017 +0200 iconview: Remove bin_window , so make the code using it conditional for gtk3. This at least unbreaks the build for now after commit a36a58933a1e07d3f54bacd5c2fe8ca53063a63a Date: Mon Nov 25 17:07:59 2024 +0530 sd: convert sidebar masterpage panels from drawingview to iconview It's possible gtk4 needs to do something else instead, but that can still be added later. See discussion newly started at [2] which might give some insights. [1] https://gitlab.gnome.org/GNOME/gtk/-/commit/8dc5e13e8c66cd260edff17dbaa10eedcc95ae1b [2] https://gerrit.libreoffice.org/c/core/+/177642/comment/4edf0ddd_f71cb30b/ Change-Id: I3bd42614addd03d483c7b41daa2b3a4677b9318e Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177769 Tested-by: Jenkins Reviewed-by: Michael Weghorn <m.weghorn@posteo.de>
2024-12-04loplugin:unusedfieldsNoel Grandin
Change-Id: Iac4a64af74c92cbd76335faa62e51fa80ef21789 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177718 Tested-by: Jenkins Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
2024-12-04tdf#88226 sd: fix cutting off the overflow text on the notes print pageTibor Nagy
This fix offers two options to preserve the overflowed text: 1: if the "Original size" option is selected for printing, the overflowed text will be displayed on a new page. 2: if the "Fit to Printable Area" option is selected for printing, notes will be scaled to fit within the available printable space. The "Multiple sheets of paper" and "Tile sheet of paper" options are disabled for notes because these options are intended for slide printing and do not make much sense for printing notes. The orientation for the notes print page has also been fixed. Change-Id: I99e56cf9aed5c32764797469a8ea7f3b25053882 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177511 Reviewed-by: Nagy Tibor <tibor.nagy.extern@allotropia.de> Tested-by: Jenkins
2024-12-04Use o3tl::cow_wrapper instead of std::shared_ptrMike Kaganski
Change-Id: I05ff47fe51cccce6a78745027ae8c2679783bd8a Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177766 Tested-by: Jenkins Reviewed-by: Mike Kaganski <mike.kaganski@collabora.com>
2024-12-04vcl: Drop MenuFloatingWindow::KillActivePopup paramMichael Weghorn
Move logic to the only caller that passed something else than the default nullptr. Change-Id: I293f2ca7ccd22f8f0f57a7fd91a6b4dfaa6a8846 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/177747 Reviewed-by: Michael Weghorn <m.weghorn@posteo.de> Tested-by: Jenkins