Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found

Target

Select target project
  • videolan/vlc
  • chouquette/vlc
  • bakiewicz.marek122/vlc
  • devnexen/vlc
  • rohanrajpal/vlc
  • blurrrb/vlc
  • gsoc/gsoc2019/darkapex/vlc
  • b1ue/vlc
  • fkuehne/vlc
  • magsoft/vlc
  • chub/vlc
  • cramiro9/vlc
  • robUx4/vlc
  • rom1v/vlc
  • akshayaky/vlc
  • tmk907/vlc
  • akymaster/vlc
  • govind.sharma/vlc
  • psilokos/vlc
  • xjbeta/vlc
  • jahan/vlc
  • 1480c1/vlc
  • amanchande/vlc
  • aaqib/vlc
  • rist/vlc
  • apol/vlc
  • mindfreeze/vlc
  • alexandre-janniaux/vlc
  • sandsmark/vlc
  • jagannatharjun/vlc
  • gsoc/gsoc2020/matiaslgonzalez/vlc
  • gsoc/gsoc2020/jagannatharjun/vlc
  • mstorsjo/vlc
  • gsoc/gsoc2020/vedenta/vlc
  • gsoc/gsoc2020/arnav-ishaan/vlc
  • gsoc/gsoc2020/andreduong/vlc
  • fuzun/vlc
  • gsoc/gsoc2020/vatsin/vlc
  • gsoc/gsoc2020/sagid/vlc
  • yaron/vlc
  • Phoenix/vlc
  • Garf/vlc
  • ePiratWorkarounds/vlc
  • tguillem/vlc
  • jnqnfe/vlc
  • mdc/vlc
  • Vedaa/vlc
  • rasa/vlc
  • quink/vlc
  • yealo/vlc
  • aleksey_ak/vlc
  • ePirat/vlc
  • ilya.yanok/vlc
  • asenat/vlc
  • m/vlc
  • bunjee/vlc
  • BLumia/vlc
  • sagudev/vlc
  • hamedmonji30/vlc
  • nullgemm/vlc
  • DivyamAhuja/vlc
  • thesamesam/vlc
  • dag7/vlc
  • snehil101/vlc
  • haasn/vlc
  • jbk/vlc
  • ValZapod/vlc
  • mfkl/vlc
  • WangChuan/vlc
  • core1024/vlc
  • GhostVaibhav/vlc
  • dfuhrmann/vlc
  • davide.prade/vlc
  • tmatth/vlc
  • Courmisch/vlc
  • zouya/vlc
  • hpi/vlc
  • EwoutH/vlc
  • aleung27/vlc
  • hengwu0/vlc
  • saladin/vlc
  • ashuio/vlc
  • richselwood/vlc
  • verma16Ayush/vlc
  • chemicalflash/vlc
  • PoignardAzur/vlc
  • huangjieNT/vlc
  • Blake-Haydon/vlc
  • AnuthaDev/vlc
  • gsoc/gsoc2021/mpd/vlc
  • nicolas_lequec/vlc
  • sambassaly/vlc
  • thresh/vlc
  • bonniegong/vlc
  • myaashish/vlc
  • stavros.vagionitis/vlc
  • ileoo/vlc
  • louis-santucci/vlc
  • cchristiansen/vlc
  • sabyasachi07/vlc
  • AbduAmeen/vlc
  • ashishb0410/vlc
  • urbanhusky/vlc
  • davidepietrasanta/vlc
  • riksleutelstad/vlc
  • jeremyVignelles/vlc
  • komh/vlc
  • iamjithinjohn/vlc
  • JohannesKauffmann/vlc2
  • kunglao/vlc
  • natzberg/vlc
  • jill/vlc
  • cwendling/vlc
  • adufou/vlc
  • ErwanAirone/vlc
  • HasinduDilshan10/vlc
  • vagrantc/vlc
  • rafiv/macos-bigsur-icon
  • Aymeriic/vlc
  • saranshg20/vlc
  • metzlove24/vlc
  • linkfanel/vlc
  • Ds886/vlc
  • metehan-arslan/vlc
  • Skantes/vlc
  • kgsandundananjaya96/vlc
  • mitchcapper/vlc
  • advaitgupta/vlc
  • StefanBruens/vlc
  • ratajs/vlc
  • T.M.F.B.3761/vlc
  • m222059/vlc
  • casemerrick/vlc
  • joshuaword2alt/vlc
  • sjwaddy/vlc
  • dima/vlc
  • Ybalrid/vlc
  • umxprime/vlc
  • eschmidt/vlc
  • vannieuwenhuysenmichelle/vlc
  • badcf00d/vlc
  • wesinator/vlc
  • louis/vlc
  • xqq/vlc
  • EmperorYP7/vlc
  • NicoLiam/vlc
  • loveleen/vlc
  • rofferom/vlc
  • rbultje/vlc
  • TheUnamed/vlc
  • pratiksharma341/vlc
  • Saurab17/vlc
  • purist.coder/vlc
  • Shuicheng/vlc
  • mdrrubel292/vlc
  • silverbleu00/vlc
  • metif12/vlc
  • asher-m/vlc
  • jeffk/vlc
  • Brandonbr1/vlc
  • beautyyuyanli/vlc
  • rego21/vlc
  • muyangren907/vlc
  • collectionbylawrencejason/vlc
  • evelez/vlc
  • GSMgeeth/vlc
  • Oneric/vlc
  • TJ5/vlc
  • XuanTung95/vlc
  • darrenjenny21/vlc
  • Trenly/vlc
  • RockyTDR/vlc
  • mjakubowski/vlc
  • caprica/vlc
  • ForteFrankie/vlc
  • seannamiller19/vlc
  • junlon2006/vlc
  • kiwiren6666/vlc
  • iuseiphonexs/vlc
  • fenngtun/vlc
  • Rajdutt999/vlc
  • typx/vlc
  • leon.vitanos/vlc
  • robertogarci0938/vlc
  • gsoc/gsoc2022/luc65r/vlc-mpd
  • skeller/vlc
  • MCJack123/vlc
  • luc65r/vlc-mpd
  • popov895/vlc
  • claucambra/vlc
  • brad/vlc
  • matthewmurua88/vlc
  • Tomas8874/vlc
  • philenotfound/vlc
  • makita-do3/vlc
  • LZXCorp/vlc
  • mar0x/vlc
  • senojetkennedy0102/vlc
  • shaneb243/vlc
  • ahmadbader/vlc
  • rajduttcse26/vlc-audio-filters
  • Juniorzito8415/vlc
  • achernyakov/vlc
  • lucasjetgroup/vlc
  • pupdoggy666/vlc
  • gmde9363/vlc
  • alexnwayne/vlc
  • bahareebrahimi781/vlc
  • hamad633666/vlc
  • umghof3112/vlc
  • joe0199771874/vlc
  • Octocats66666666/vlc
  • jjm_223/vlc
  • btech10110.19/vlc
  • sunnykfc028/vlc-audio-filters
  • loic/vlc
  • nguyenminhducmx1/vlc
  • JanekKrueger/vlc
  • bstubbington2/vlc
  • rcombs/vlc
  • Ordissimo/vlc
  • king7532/vlc
  • noobsauce101/vlc
  • schong0525/vlc
  • myQwil/vlc
  • apisbg91/vlc
  • geeboy0101017/vlc
  • kim.faughey/vlc
  • nurupo/vlc
  • yyusea/vlc
  • 0711235879.khco/vlc
  • ialo/vlc
  • iloveyeye2/vlc
  • gdtdftdqtd/vlc
  • leandroconsiglio/vlc
  • AndyHTML2012/vlc
  • ncz/vlc
  • lucenticus/vlc
  • knr1931/vlc
  • kjoonlee/vlc
  • chandrakant100/vlc-qt
  • johge42/vlc
  • polter/vlc
  • hexchain/vlc
  • Tushwrld/vlc
  • mztea928/vlc
  • jbelloncastro/vlc
  • alvinhochun/vlc
  • ghostpiratecrow/vlc
  • ujjwaltwitx/vlc
  • alexsonarin06/vlc
  • adrianbon76/vlc
  • altsod/vlc
  • damien.lucas44/vlc
  • dmytrivtaisa/vlc
  • utk202/vlc
  • aaxhrj/vlc
  • thomas.hermes/vlc
  • structurenewworldorder/vlc
  • slomo/vlc
  • wantlamy/vlc
  • musc.o3cminc/vlc
  • thebarshablog/vlc
  • kerrick/vlc
  • kratos142518/vlc
  • leogps/vlc
  • vacantron/vlc
  • luna_koly/vlc
  • Ratio2/vlc
  • anuoshemohammad/vlc
  • apsun/vlc
  • aaa1115910/vlc
  • alimotmoyo/vlc
  • Ambossmann/vlc
  • Sam-LearnsToCode/vlc
  • Chilledheart/vlc
  • Labnann/vlc
  • ktcoooot1/vlc
  • mohit-marathe/vlc
  • johnddx/vlc
  • manstabuk/vlc
  • Omar-ahmed314/vlc
  • vineethkm/vlc
  • 9Enemi86/vlc
  • radoslav.m.panteleev/vlc
  • ashishami2002/vlc
  • Corbax/vlc
  • firnasahmed/vlc
  • pelayarmalam4/vlc
  • c0ff330k/vlc
  • shikhindahikar/vlc
  • l342723951/vlc
  • christianschwandner/vlc
  • douniwan5788/vlc
  • 7damian7/vlc
  • ferdnyc/vlc
  • f.ales1/vlc
  • pandagby/vlc
  • BaaBaa/vlc
  • jewe37/vlc
  • w00drow/vlc
  • russelltg/vlc
  • ironicallygod/vlc
  • soumyaDghosh/vlc
  • linzihao1999/vlc
  • deyayush6/vlc
  • mibi88/vlc
  • newabdallah10/vlc
  • jhorbincolombia/vlc
  • rimvihaqueshupto/vlc
  • andrewkhon98/vlc
  • fab78/vlc
  • lapaz17/vlc
  • amanna13/vlc
  • mdakram28/vlc
  • 07jw1980/vlc
  • sohamgupta/vlc
  • Eson-Jia1/vlc
  • Sumou/vlc
  • vikram-kangotra/vlc
  • chalice191/vlc
  • olivercalder/vlc
  • aaasg4001/vlc
  • zipdox/vlc
  • kwizart/vlc
  • Dragon-S/vlc
  • jdemeule/vlc
  • gabriel_lt/vlc
  • locutusofborg/vlc
  • sammirata/vlc-librist
  • another/vlc
  • Benjamin_Loison/vlc
  • ahmedmoselhi/vlc
  • petergaal/vlc
  • huynhsontung/vlc
  • dariusmihut/vlc
  • tvermaashutosh/vlc
  • buti/vlc
  • Niram7777/vlc
  • rohan-here/vlc
  • balaji-sivasakthi/vlc
  • rlindner81/vlc
  • Kakadus/vlc
  • djain/vlc
  • ABBurmeister/vlc
  • craighuggins/vlc
  • orbea/vlc
  • maxos/vlc
  • aakarshmj/vlc
  • kblaschke/vlc
  • ankitm/vlc
  • advait-0/vlc
  • mohak2003/vlc
  • yselkowitz/vlc
  • AZM999/vlc-azm
  • andrey.turkin/vlc
  • Disha-Baghel/vlc
  • nowrep/vlc
  • Apeng/vlc
  • Choucroute_melba/vlc
  • autra/vlc
  • eclipseo/vlc
  • fhuber/vlc
  • olafhering/vlc
  • sdasda7777/vlc
  • 1div0/vlc
  • skosnits/vlc-extended-playlist-support
  • dnicolson/vlc
  • Timshel/vlc
  • octopols/vlc
  • MangalK/vlc
  • nima64/vlc
  • misawai/vlc
  • Alexander-Wilms/vlc
  • Maxime2/vlc-fork-for-visualizer
  • ww/vlc
  • jeske/vlc
  • sgross-emlix/vlc
  • morenonatural/vlc
  • freakingLovesVLC/vlc
  • borisgolovnev/vlc
  • mpromonet/vlc
  • diogo.simao-marques/vlc
  • masstock/vlc
  • pratikpatel8982/vlc
  • hugok79/vlc
  • longervision/vlc
  • abhiudaysurya/vlc
  • rishabhgarg/vlc
  • tumic/vlc
  • cart/vlc
  • shubham442/vlc
  • Aditya692005/vlc
  • sammirata/vlc4
  • syrykh/vlc
  • Vvorcun/macos-new-icon
  • AyaanshC/vlc
  • nasso/vlc
  • Quark/vlc
  • sebastinas/vlc
  • rhstone/vlc
  • talregev/vlc
  • Managor/vlc
  • abdsaber000/vlc
  • falbrechtskirchinger/vlc
  • b.sullender/vlc
  • hulxv/vlc
  • zyad-ayad/vlc
408 results
Show changes
Commits on Source (5)
......@@ -982,6 +982,7 @@ libqt_plugin_la_QML = \
gui/qt/widgets/qml/ActionButtonOverlay.qml \
gui/qt/widgets/qml/ActionButtonPrimary.qml \
gui/qt/widgets/qml/BannerTabButton.qml \
gui/qt/widgets/qml/BannerCone.qml \
gui/qt/widgets/qml/BusyIndicatorExt.qml \
gui/qt/widgets/qml/CaptionLabel.qml \
gui/qt/widgets/qml/CheckButton.qml \
......
......@@ -35,6 +35,7 @@
#include "util/csdbuttonmodel.hpp"
#include <QBitmap>
#include <QTimer>
#include <assert.h>
......@@ -114,6 +115,103 @@ HWND WinId( QWindow *windowHandle )
return 0;
}
bool isWindowFixedSize(const QWindow *window)
{
if (window->flags() & Qt::MSWindowsFixedSizeDialogHint)
return true;
const auto minSize = window->minimumSize();
const auto maxSize = window->maximumSize();
return minSize.isValid() && maxSize.isValid() && minSize == maxSize;
}
class WinSystemMenuButton : public SystemMenuButton
{
public:
WinSystemMenuButton(QWindow *window, QObject *parent)
: SystemMenuButton {parent}
, m_window {window}
{
connect(this, &CSDButton::clicked, this, &WinSystemMenuButton::handleClick);
connect(this, &CSDButton::doubleClicked, this, &WinSystemMenuButton::handleDoubleClick);
}
void showSystemMenu() override
{
HWND hwnd = (HWND)m_window->winId();
HMENU hmenu = ::GetSystemMenu(hwnd, FALSE);
if (!hmenu)
return;
// Tweak the menu items according to the current window status.
const auto winState = m_window->windowStates();
const bool maxOrFull = (winState.testFlag(Qt::WindowMaximized) || winState.testFlag(Qt::WindowFullScreen));
const bool fixedSize = isWindowFixedSize(m_window);
EnableMenuItem(hmenu, SC_MOVE, (MF_BYCOMMAND | (!maxOrFull ? MFS_ENABLED : MFS_DISABLED)));
EnableMenuItem(hmenu, SC_SIZE, (MF_BYCOMMAND | ((!maxOrFull && !fixedSize) ? MFS_ENABLED : MFS_DISABLED)));
EnableMenuItem(hmenu, SC_RESTORE, (MF_BYCOMMAND | ((maxOrFull && !fixedSize) ? MFS_ENABLED : MFS_DISABLED)));
EnableMenuItem(hmenu, SC_MINIMIZE, (MF_BYCOMMAND | MFS_ENABLED));
EnableMenuItem(hmenu, SC_MAXIMIZE, (MF_BYCOMMAND | ((!maxOrFull && !fixedSize) ? MFS_ENABLED : MFS_DISABLED)));
EnableMenuItem(hmenu, SC_CLOSE, (MF_BYCOMMAND | MFS_ENABLED));
// calculate screen point 'margin' down from system menu button's rect
const QPoint margin {0, 4};
const auto bottomLeft = rect().bottomLeft();
const auto screenPoints = m_window->mapToGlobal(bottomLeft) + margin;
const auto alignment = (QGuiApplication::isRightToLeft() ? TPM_RIGHTALIGN : TPM_LEFTALIGN);
// show menu
emit systemMenuVisibilityChanged(true);
const int action = TrackPopupMenu(hmenu, (TPM_RETURNCMD | alignment)
, screenPoints.x(), screenPoints.y()
, NULL, hwnd, 0);
// unlike native system menu which sends WM_SYSCOMMAND, TrackPopupMenu sends WM_COMMAND
// imitate native system menu by sending the action manually as WM_SYSCOMMAND
PostMessageW(hwnd, WM_SYSCOMMAND, action, 0);
emit systemMenuVisibilityChanged(false);
}
private:
// target window
QWindow *m_window = {};
// used to reject click() incase a doubleClick() is followed
bool m_triggerSystemMenu = false;
void handleClick()
{
// delay the show of sytem menu to check if this 'click' is
// a double click, 'm_triggerSystemMenu' is used to reject the
// queued 'showSystemMenu' call in case this is a double click
m_triggerSystemMenu = true;
QTimer::singleShot(100, this, [this]()
{
if (!m_triggerSystemMenu)
return;
showSystemMenu();
});
}
void handleDoubleClick()
{
// reject any queued showSystemMenu call
m_triggerSystemMenu = false;
m_window->close();
}
};
class CSDWin32EventHandler : public QObject, public QAbstractNativeEventFilter
{
public:
......@@ -654,6 +752,9 @@ InterfaceWindowHandlerWin32::InterfaceWindowHandlerWin32(qt_intf_t *_p_intf, Mai
#endif
{
auto systemMenuButton = std::make_shared<WinSystemMenuButton>(mainCtx->intfMainWindow(), nullptr);
mainCtx->csdButtonModel()->setSystemMenuButton(systemMenuButton);
QApplication::instance()->installNativeEventFilter(this);
}
......
......@@ -160,17 +160,11 @@ FocusScope {
Navigation.parentItem: root
Navigation.rightItem: globalMenuGroup
Navigation.downItem: localMenuGroup.visible ? localMenuGroup : localToolbarBg
}
Image {
sourceSize.width: VLCStyle.icon_normal
sourceSize.height: VLCStyle.icon_normal
source: SVGColorImage.colorize("qrc:///misc/cone.svg")
.accent(VLCStyle.colors.accent)
.uri()
enabled: false
}
Widgets.BannerCone {
}
}
/* Button for the sources */
......
......@@ -226,19 +226,20 @@ FocusScope{
onHoveredChanged: root.requestLockUnlockAutoHide(hovered)
}
Image {
Widgets.BannerCone {
id: logo
anchors.verticalCenter: parent.verticalCenter
anchors.left: backBtn.right
anchors.leftMargin: VLCStyle.margin_xxsmall
sourceSize.width: VLCStyle.icon_normal
sourceSize.height: VLCStyle.icon_normal
source: SVGColorImage.colorize("qrc:///misc/cone.svg")
.accent(root.colors.accent)
.uri()
enabled: false
Connections {
target: logo.button
onSystemMenuVisibilityChanged: {
root.requestLockUnlockAutoHide(visible)
}
}
}
}
......
......@@ -67,6 +67,11 @@ void CSDButton::click()
emit clicked();
}
void CSDButton::doubleClick()
{
emit doubleClicked();
}
CSDButtonModel::CSDButtonModel(MainCtx *mainCtx, QObject *parent)
: QObject {parent}
, m_mainCtx {mainCtx}
......@@ -88,6 +93,17 @@ QList<CSDButton *> CSDButtonModel::windowCSDButtons() const
return m_windowCSDButtons;
}
CSDButton *CSDButtonModel::systemMenuButton() const
{
return m_systemMenuButton.get();
}
void CSDButtonModel::setSystemMenuButton(std::shared_ptr<SystemMenuButton> button)
{
m_systemMenuButton = std::move(button);
}
void CSDButtonModel::minimizeButtonClicked()
{
emit m_mainCtx->requestInterfaceMinimized();
......
......@@ -23,6 +23,7 @@
#include <QObject>
#include <QRect>
#include <memory>
class CSDButton : public QObject
{
......@@ -37,6 +38,7 @@ public:
Minimize,
MaximizeRestore,
Close,
SystemMenu,
TypeCount
};
......@@ -61,12 +63,15 @@ public:
public slots:
// signals to perfrom action associated with button
// actions are dependent on implmentation
void click();
void doubleClick();
signals:
void showHoveredChanged();
void rectChanged();
void clicked();
void doubleClicked();
private:
const ButtonType m_type;
......@@ -75,17 +80,39 @@ private:
};
class SystemMenuButton : public CSDButton
{
Q_OBJECT
public:
SystemMenuButton(QObject *parent = nullptr) : CSDButton {SystemMenuButton::SystemMenu, parent} {}
virtual void showSystemMenu() = 0;
signals:
void systemMenuVisibilityChanged(bool visible);
};
class MainCtx;
class CSDButtonModel : public QObject
{
Q_OBJECT
Q_PROPERTY(QList<CSDButton *> windowCSDButtons READ windowCSDButtons CONSTANT)
Q_PROPERTY(CSDButton *systemMenuButton READ systemMenuButton CONSTANT)
public:
CSDButtonModel(MainCtx *mainCtx, QObject *parent = nullptr);
QList<CSDButton *> windowCSDButtons() const;
CSDButton *systemMenuButton() const;
// set by internal implmentation
// all the actions are also handled by implementation
void setSystemMenuButton(std::shared_ptr<SystemMenuButton> button);
private slots:
void minimizeButtonClicked();
......@@ -94,7 +121,12 @@ private slots:
private:
MainCtx *m_mainCtx;
// CSD window action buttons i.e minimize, maximize, close
QList<CSDButton *> m_windowCSDButtons;
// sysmenu button, available on windows only
std::shared_ptr<SystemMenuButton> m_systemMenuButton = nullptr;
};
......
......@@ -155,6 +155,7 @@
<qresource prefix="/widgets">
<file alias="ActionButtonOverlay.qml">widgets/qml/ActionButtonOverlay.qml</file>
<file alias="ActionButtonPrimary.qml">widgets/qml/ActionButtonPrimary.qml</file>
<file alias="BannerCone.qml">widgets/qml/BannerCone.qml</file>
<file alias="BannerTabButton.qml">widgets/qml/BannerTabButton.qml</file>
<file alias="BusyIndicatorExt.qml">widgets/qml/BusyIndicatorExt.qml</file>
<file alias="AcrylicBackground.qml">widgets/qml/AcrylicBackground.qml</file>
......
/*****************************************************************************
* Copyright (C) 2023 VLC authors and VideoLAN
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* ( at your option ) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
*****************************************************************************/
import QtQuick 2.11
import org.videolan.vlc 0.1
import "qrc:///widgets/" as Widgets
import "qrc:///style/"
Image {
id: root
property var button: MainCtx.csdButtonModel.systemMenuButton
sourceSize.width: VLCStyle.icon_normal
sourceSize.height: VLCStyle.icon_normal
source: SVGColorImage.colorize("qrc:///misc/cone.svg")
.accent(VLCStyle.colors.accent)
.uri()
focus: false
Loader {
anchors.fill: root
enabled: MainCtx.clientSideDecoration && root.button
sourceComponent: MouseArea {
onClicked: { root.button.click() }
onDoubleClicked: { root.button.doubleClick() }
Connections {
// don't target MouseArea for position since we
// need position updates of cone, inresepect of BannerSources
// to correctly track cone's global position
target: root
// handles VLCStyle.scale changes
onXChanged: Qt.callLater(root.updateRect)
onYChanged: Qt.callLater(root.updateRect)
onWidthChanged: Qt.callLater(root.updateRect)
onHeightChanged: Qt.callLater(root.updateRect)
}
Connections {
target: VLCStyle
// handle window resize
onAppWidthChanged: Qt.callLater(root.updateRect)
onAppHeightChanged: Qt.callLater(root.updateRect)
}
}
}
function updateRect() {
var rect = root.mapToItem(null, 0, 0, width, height)
if (button)
button.rect = rect
}
}