source: smplayer/trunk/src/myapplication.cpp@ 175

Last change on this file since 175 was 165, checked in by Silvan Scherrer, 11 years ago

SMPlayer: update trunk to latest 0.8.7

File size: 6.8 KB
Line 
1/* smplayer, GUI front-end for mplayer.
2 Copyright (C) 2006-2014 Ricardo Villalba <rvm@users.sourceforge.net>
3
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
8
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
13
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
17*/
18
19#include "myapplication.h"
20
21#ifdef USE_WINEVENTFILTER
22#include <QKeyEvent>
23#include <QEvent>
24#include <QWidget>
25#include <windows.h>
26#include <QDebug>
27
28#ifndef WM_APPCOMMAND
29#define WM_APPCOMMAND 0x0319
30#endif
31
32#ifndef FAPPCOMMAND_MOUSE
33#define FAPPCOMMAND_MOUSE 0x8000
34#define FAPPCOMMAND_KEY 0
35#define FAPPCOMMAND_OEM 0x1000
36#define FAPPCOMMAND_MASK 0xF000
37#define GET_APPCOMMAND_LPARAM(lParam) ((short)(HIWORD(lParam) & ~FAPPCOMMAND_MASK))
38#define GET_DEVICE_LPARAM(lParam) ((WORD)(HIWORD(lParam) & FAPPCOMMAND_MASK))
39#define GET_MOUSEORKEY_LPARAM GET_DEVICE_LPARAM
40#define GET_FLAGS_LPARAM(lParam) (LOWORD(lParam))
41#define GET_KEYSTATE_LPARAM(lParam) GET_FLAGS_LPARAM(lParam)
42
43#define APPCOMMAND_BROWSER_BACKWARD 1
44#define APPCOMMAND_BROWSER_FORWARD 2
45#define APPCOMMAND_BROWSER_REFRESH 3
46#define APPCOMMAND_BROWSER_STOP 4
47#define APPCOMMAND_BROWSER_SEARCH 5
48#define APPCOMMAND_BROWSER_FAVORITES 6
49#define APPCOMMAND_BROWSER_HOME 7
50#define APPCOMMAND_VOLUME_MUTE 8
51#define APPCOMMAND_VOLUME_DOWN 9
52#define APPCOMMAND_VOLUME_UP 10
53#define APPCOMMAND_MEDIA_NEXTTRACK 11
54#define APPCOMMAND_MEDIA_PREVIOUSTRACK 12
55#define APPCOMMAND_MEDIA_STOP 13
56#define APPCOMMAND_MEDIA_PLAY_PAUSE 14
57#define APPCOMMAND_LAUNCH_MAIL 15
58#define APPCOMMAND_LAUNCH_MEDIA_SELECT 16
59#define APPCOMMAND_LAUNCH_APP1 17
60#define APPCOMMAND_LAUNCH_APP2 18
61#define APPCOMMAND_BASS_DOWN 19
62#define APPCOMMAND_BASS_BOOST 20
63#define APPCOMMAND_BASS_UP 21
64#define APPCOMMAND_TREBLE_DOWN 22
65#define APPCOMMAND_TREBLE_UP 23
66#endif // FAPPCOMMAND_MOUSE
67
68// New commands from Windows XP (some even Sp1)
69#ifndef APPCOMMAND_MICROPHONE_VOLUME_MUTE
70#define APPCOMMAND_MICROPHONE_VOLUME_MUTE 24
71#define APPCOMMAND_MICROPHONE_VOLUME_DOWN 25
72#define APPCOMMAND_MICROPHONE_VOLUME_UP 26
73#define APPCOMMAND_HELP 27
74#define APPCOMMAND_FIND 28
75#define APPCOMMAND_NEW 29
76#define APPCOMMAND_OPEN 30
77#define APPCOMMAND_CLOSE 31
78#define APPCOMMAND_SAVE 32
79#define APPCOMMAND_PRINT 33
80#define APPCOMMAND_UNDO 34
81#define APPCOMMAND_REDO 35
82#define APPCOMMAND_COPY 36
83#define APPCOMMAND_CUT 37
84#define APPCOMMAND_PASTE 38
85#define APPCOMMAND_REPLY_TO_MAIL 39
86#define APPCOMMAND_FORWARD_MAIL 40
87#define APPCOMMAND_SEND_MAIL 41
88#define APPCOMMAND_SPELL_CHECK 42
89#define APPCOMMAND_DICTATE_OR_COMMAND_CONTROL_TOGGLE 43
90#define APPCOMMAND_MIC_ON_OFF_TOGGLE 44
91#define APPCOMMAND_CORRECTION_LIST 45
92#define APPCOMMAND_MEDIA_PLAY 46
93#define APPCOMMAND_MEDIA_PAUSE 47
94#define APPCOMMAND_MEDIA_RECORD 48
95#define APPCOMMAND_MEDIA_FAST_FORWARD 49
96#define APPCOMMAND_MEDIA_REWIND 50
97#define APPCOMMAND_MEDIA_CHANNEL_UP 51
98#define APPCOMMAND_MEDIA_CHANNEL_DOWN 52
99#endif // APPCOMMAND_MICROPHONE_VOLUME_MUTE
100
101#define VK_MEDIA_NEXT_TRACK 0xB0
102#define VK_MEDIA_PREV_TRACK 0xB1
103#define VK_MEDIA_PLAY_PAUSE 0xB3
104#define VK_MEDIA_STOP 0xB2
105
106
107bool MyApplication::winEventFilter(MSG * msg, long * result) {
108 //qDebug() << "MyApplication::winEventFilter" << msg->message << "lParam:" << msg->lParam;
109
110 static uint last_appcommand = 0;
111
112 if (msg->message == WM_KEYDOWN) {
113 //qDebug("MyApplication::winEventFilter: WM_KEYDOWN: %X", msg->wParam);
114 bool eat_key = false;
115 if ((last_appcommand == APPCOMMAND_MEDIA_NEXTTRACK) && (msg->wParam == VK_MEDIA_NEXT_TRACK)) eat_key = true;
116 else
117 if ((last_appcommand == APPCOMMAND_MEDIA_PREVIOUSTRACK) && (msg->wParam == VK_MEDIA_PREV_TRACK)) eat_key = true;
118 else
119 if ((last_appcommand == APPCOMMAND_MEDIA_PLAY_PAUSE) && (msg->wParam == VK_MEDIA_PLAY_PAUSE)) eat_key = true;
120 else
121 if ((last_appcommand == APPCOMMAND_MEDIA_STOP) && (msg->wParam == VK_MEDIA_STOP)) eat_key = true;
122
123 if (eat_key) {
124 qDebug("MyApplication::winEventFilter: ignoring key %X", msg->wParam);
125 last_appcommand = 0;
126 *result = true;
127 return true;
128 }
129 }
130 else
131 if (msg->message == WM_APPCOMMAND) {
132 /*
133 QKeySequence k(Qt::Key_MediaTogglePlayPause);
134 qDebug() << "MyApplication::winEventFilter" << k.toString();
135 */
136
137 //qDebug() << "MyApplication::winEventFilter" << msg->message << "lParam:" << msg->lParam;
138 uint cmd = GET_APPCOMMAND_LPARAM(msg->lParam);
139 uint uDevice = GET_DEVICE_LPARAM(msg->lParam);
140 uint dwKeys = GET_KEYSTATE_LPARAM(msg->lParam);
141 qDebug() << "MyApplication::winEventFilter: cmd:" << cmd <<"uDevice:" << uDevice << "dwKeys:" << dwKeys;
142
143 //if (uDevice == FAPPCOMMAND_KEY) {
144 int key = 0;
145 Qt::KeyboardModifiers modifier = Qt::NoModifier;
146 QString name;
147
148 switch (cmd) {
149 case APPCOMMAND_MEDIA_PAUSE: key = Qt::Key_MediaPause; name = "Media Pause"; break;
150 case APPCOMMAND_MEDIA_PLAY: key = Qt::Key_MediaPlay; name = "Media Play"; break;
151 case APPCOMMAND_MEDIA_STOP: key = Qt::Key_MediaStop; name = "Media Stop"; break;
152 case APPCOMMAND_MEDIA_PLAY_PAUSE: key = Qt::Key_MediaTogglePlayPause; name = "Toggle Media Play/Pause"; break;
153
154 case APPCOMMAND_MEDIA_NEXTTRACK: key = Qt::Key_MediaNext; name = "Media Next"; break;
155 case APPCOMMAND_MEDIA_PREVIOUSTRACK: key = Qt::Key_MediaPrevious; name = "Media Previous"; break;
156
157 case APPCOMMAND_MEDIA_FAST_FORWARD: key = Qt::Key_F; modifier = Qt::ShiftModifier | Qt::ControlModifier; break;
158 case APPCOMMAND_MEDIA_REWIND: key = Qt::Key_B; modifier = Qt::ShiftModifier | Qt::ControlModifier; break;
159 }
160
161 if (key != 0) {
162 last_appcommand = cmd;
163
164 QKeyEvent event(QEvent::KeyPress, key, modifier, name);
165 QWidget * w = QApplication::focusWidget();
166 if (w) QCoreApplication::sendEvent(w, &event);
167 *result = true;
168 return true;
169 }
170 //}
171 }
172
173 return false;
174}
175#endif // USE_WINEVENTFILTER
176
177#include "moc_myapplication.cpp"
178
Note: See TracBrowser for help on using the repository browser.