mirror of
https://github.com/xiaoyifang/goldendict-ng.git
synced 2024-11-30 17:24:08 +00:00
imp. remove mouseover32
This commit is contained in:
parent
b71925787c
commit
c96a83f5d2
|
@ -482,15 +482,13 @@ SOURCES += folding.cc \
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
FORMS += texttospeechsource.ui
|
FORMS += texttospeechsource.ui
|
||||||
SOURCES += mouseover_win32/ThTypes.c \
|
SOURCES += wordbyauto.cc \
|
||||||
wordbyauto.cc \
|
|
||||||
guids.c \
|
guids.c \
|
||||||
x64.cc \
|
x64.cc \
|
||||||
speechclient_win.cc \
|
speechclient_win.cc \
|
||||||
texttospeechsource.cc \
|
texttospeechsource.cc \
|
||||||
speechhlp.cc
|
speechhlp.cc
|
||||||
HEADERS += mouseover_win32/ThTypes.h \
|
HEADERS += wordbyauto.hh \
|
||||||
wordbyauto.hh \
|
|
||||||
uiauto.hh \
|
uiauto.hh \
|
||||||
x64.hh \
|
x64.hh \
|
||||||
texttospeechsource.hh \
|
texttospeechsource.hh \
|
||||||
|
|
|
@ -57,7 +57,6 @@
|
||||||
|
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "mouseover_win32/GDDataTranfer.h"
|
|
||||||
#include "wstring.hh"
|
#include "wstring.hh"
|
||||||
#include "wstring_qt.hh"
|
#include "wstring_qt.hh"
|
||||||
|
|
||||||
|
@ -884,10 +883,6 @@ MainWindow::MainWindow( Config::Class & cfg_ ):
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
LionSupport::addFullscreen(this);
|
LionSupport::addFullscreen(this);
|
||||||
#endif
|
#endif
|
||||||
#ifdef Q_OS_WIN32
|
|
||||||
gdAskMessage = RegisterWindowMessage( GD_MESSAGE_NAME );
|
|
||||||
( static_cast< QHotkeyApplication * >( qApp ) )->setMainWindow( this );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
ui.centralWidget->grabGesture( Gestures::GDPinchGestureType );
|
ui.centralWidget->grabGesture( Gestures::GDPinchGestureType );
|
||||||
ui.centralWidget->grabGesture( Gestures::GDSwipeGestureType );
|
ui.centralWidget->grabGesture( Gestures::GDSwipeGestureType );
|
||||||
|
@ -4831,14 +4826,6 @@ bool MainWindow::handleGDMessage( MSG * message, long * result )
|
||||||
if( !view )
|
if( !view )
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
LPGDDataStruct lpdata = ( LPGDDataStruct ) message->lParam;
|
|
||||||
|
|
||||||
QString str = view->wordAtPoint( lpdata->Pt.x, lpdata->Pt.y );
|
|
||||||
|
|
||||||
memset( lpdata->cwData, 0, lpdata->dwMaxLength * sizeof( WCHAR ) );
|
|
||||||
str.truncate( lpdata->dwMaxLength - 1 );
|
|
||||||
str.toWCharArray( lpdata->cwData );
|
|
||||||
|
|
||||||
*result = 1;
|
*result = 1;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
150
mouseover.cc
150
mouseover.cc
|
@ -10,7 +10,6 @@
|
||||||
#include <sddl.h>
|
#include <sddl.h>
|
||||||
#include <accctrl.h>
|
#include <accctrl.h>
|
||||||
#include <aclapi.h>
|
#include <aclapi.h>
|
||||||
#include "mouseover_win32/ThTypes.h"
|
|
||||||
#include "wordbyauto.hh"
|
#include "wordbyauto.hh"
|
||||||
#include "x64.hh"
|
#include "x64.hh"
|
||||||
#endif
|
#endif
|
||||||
|
@ -93,78 +92,7 @@ static void SetLowLabelToGDSynchroObjects()
|
||||||
MouseOver::MouseOver() :
|
MouseOver::MouseOver() :
|
||||||
pPref(NULL)
|
pPref(NULL)
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN32
|
|
||||||
HMODULE hm;
|
|
||||||
ChangeWindowMessageFilterFunc changeWindowMessageFilterFunc = NULL;
|
|
||||||
ChangeWindowMessageFilterExFunc changeWindowMessageFilterExFunc = NULL;
|
|
||||||
mouseOverEnabled = false;
|
|
||||||
|
|
||||||
ThTypes_Init();
|
|
||||||
memset( GlobalData, 0, sizeof( TGlobalDLLData ) );
|
|
||||||
#ifdef Q_OS_WIN64
|
|
||||||
memset( GlobalData32, 0, sizeof( TGlobalDLLData32 ) );
|
|
||||||
#endif
|
|
||||||
// strcpy( GlobalData->LibName,
|
|
||||||
// QDir::toNativeSeparators( QDir( QCoreApplication::applicationDirPath() ).filePath( "GdTextOutHook.dll" ) ).toLocal8Bit().data() );
|
|
||||||
#ifdef Q_OS_WIN64
|
|
||||||
QDir::toNativeSeparators( QDir( QCoreApplication::applicationDirPath() ).filePath( "GdTextOutHook64.dll" ) ).toWCharArray( GlobalData->LibName );
|
|
||||||
QDir::toNativeSeparators( QDir( QCoreApplication::applicationDirPath() + "/x86" ).filePath( "GdTextOutHook.dll" ) ).toWCharArray( GlobalData32->LibName );
|
|
||||||
#else
|
|
||||||
QDir::toNativeSeparators( QDir( QCoreApplication::applicationDirPath() ).filePath( "GdTextOutHook.dll" ) ).toWCharArray( GlobalData->LibName );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Create the window to receive spying results to
|
|
||||||
|
|
||||||
WNDCLASSEX wcex;
|
|
||||||
|
|
||||||
wcex.cbSize = sizeof( WNDCLASSEX );
|
|
||||||
|
|
||||||
wcex.style = 0;
|
|
||||||
wcex.lpfnWndProc = ( WNDPROC ) eventHandler;
|
|
||||||
wcex.cbClsExtra = 0;
|
|
||||||
wcex.cbWndExtra = 0;
|
|
||||||
wcex.hInstance = GetModuleHandle( 0 );
|
|
||||||
wcex.hIcon = NULL;
|
|
||||||
wcex.hCursor = NULL,
|
|
||||||
wcex.hbrBackground = NULL;
|
|
||||||
wcex.lpszMenuName = NULL;
|
|
||||||
wcex.lpszClassName = className;
|
|
||||||
wcex.hIconSm = NULL;
|
|
||||||
|
|
||||||
RegisterClassEx( &wcex );
|
|
||||||
|
|
||||||
GlobalData->ServerWND = CreateWindow( className, L"", 0, 0, 0, 0, 0, GetDesktopWindow(), NULL, GetModuleHandle( 0 ), 0 );
|
|
||||||
#ifdef Q_OS_WIN64
|
|
||||||
GlobalData32->ServerWND = HandleToLong( GlobalData->ServerWND );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN64
|
|
||||||
spyDll = LoadLibrary( QDir::toNativeSeparators( QDir( QCoreApplication::applicationDirPath() ).filePath( "GdTextOutSpy64.dll" ) ).toStdWString().c_str() );
|
|
||||||
#else
|
|
||||||
spyDll = LoadLibrary( QDir::toNativeSeparators( QDir( QCoreApplication::applicationDirPath() ).filePath( "GdTextOutSpy.dll" ) ).toStdWString().c_str() );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if ( spyDll )
|
|
||||||
activateSpyFn = ( ActivateSpyFn ) GetProcAddress( spyDll, "ActivateTextOutSpying" );
|
|
||||||
|
|
||||||
// Allow messages from low intehrity process - for Vista and Win7
|
|
||||||
hm = GetModuleHandle( __TEXT("user32.dll"));
|
|
||||||
if ( hm != NULL ) {
|
|
||||||
changeWindowMessageFilterExFunc = (ChangeWindowMessageFilterExFunc)GetProcAddress( hm, "ChangeWindowMessageFilterEx" );
|
|
||||||
if( changeWindowMessageFilterExFunc ) {
|
|
||||||
CHANGEFILTERSTRUCT cfs = { sizeof( CHANGEFILTERSTRUCT ), 0 };
|
|
||||||
changeWindowMessageFilterExFunc( GlobalData->ServerWND, WM_MY_SHOW_TRANSLATION, 1 /* MSGFLT_ALLOW */, &cfs );
|
|
||||||
} else {
|
|
||||||
changeWindowMessageFilterFunc = (ChangeWindowMessageFilterFunc)GetProcAddress( hm, "ChangeWindowMessageFilter" );
|
|
||||||
if( changeWindowMessageFilterFunc )
|
|
||||||
changeWindowMessageFilterFunc( WM_MY_SHOW_TRANSLATION, 1 /* MSGFLT_ADD */ );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//Allow object access from low intehrity process - for Vista and Win7
|
|
||||||
SetLowLabelToGDSynchroObjects();
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MouseOver::enableMouseOver()
|
void MouseOver::enableMouseOver()
|
||||||
|
@ -198,24 +126,10 @@ LRESULT MouseOver::makeScanBitMask()
|
||||||
LRESULT res = 0;
|
LRESULT res = 0;
|
||||||
if( pPref == NULL )
|
if( pPref == NULL )
|
||||||
return 0;
|
return 0;
|
||||||
if( !pPref->enableScanPopupModifiers || checkModifiersPressed( pPref->scanPopupModifiers ) ) {
|
|
||||||
res = GD_FLAG_METHOD_STANDARD;
|
|
||||||
if( pPref->scanPopupUseUIAutomation !=0 )
|
|
||||||
res |= GD_FLAG_METHOD_UI_AUTOMATION;
|
|
||||||
if( pPref->scanPopupUseIAccessibleEx !=0 )
|
|
||||||
res |= GD_FLAG_METHOD_IACCESSIBLEEX;
|
|
||||||
if( pPref->scanPopupUseGDMessage !=0 )
|
|
||||||
res |= GD_FLAG_METHOD_GD_MESSAGE;
|
|
||||||
}
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef Q_OS_WIN64
|
|
||||||
#define Global_Data GlobalData32
|
|
||||||
#else
|
|
||||||
#define Global_Data GlobalData
|
|
||||||
#endif
|
|
||||||
|
|
||||||
LRESULT CALLBACK MouseOver::eventHandler( HWND hwnd_, UINT msg,
|
LRESULT CALLBACK MouseOver::eventHandler( HWND hwnd_, UINT msg,
|
||||||
WPARAM wparam, LPARAM lparam )
|
WPARAM wparam, LPARAM lparam )
|
||||||
{
|
{
|
||||||
|
@ -232,58 +146,6 @@ LRESULT CALLBACK MouseOver::eventHandler( HWND hwnd_, UINT msg,
|
||||||
int wordSeqPos = 0;
|
int wordSeqPos = 0;
|
||||||
QString wordSeq;
|
QString wordSeq;
|
||||||
|
|
||||||
#ifdef Q_OS_WIN64
|
|
||||||
HWND hwnd = ( HWND )LongToHandle( Global_Data->LastWND );
|
|
||||||
#else
|
|
||||||
HWND hwnd = Global_Data->LastWND;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if( Global_Data->CurMod.WordLen == 0)
|
|
||||||
{
|
|
||||||
if( ( res & GD_FLAG_METHOD_UI_AUTOMATION ) == 0 )
|
|
||||||
return 0;
|
|
||||||
POINT pt = Global_Data->LastPt;
|
|
||||||
WCHAR *pwstr = gdGetWordAtPointByAutomation( pt );
|
|
||||||
if( pwstr == NULL ) return 0;
|
|
||||||
wordSeq = QString::fromWCharArray( pwstr );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
|
|
||||||
// Is the string in utf8 or in locale encoding?
|
|
||||||
|
|
||||||
gd::wchar testBuf[ 256 ];
|
|
||||||
|
|
||||||
long result = Utf8::decode( Global_Data->CurMod.MatchedWord,
|
|
||||||
strlen( Global_Data->CurMod.MatchedWord ),
|
|
||||||
testBuf );
|
|
||||||
|
|
||||||
if ( result >= 0 )
|
|
||||||
{
|
|
||||||
// It seems to be
|
|
||||||
QString begin = QString::fromUtf8( Global_Data->CurMod.MatchedWord,
|
|
||||||
Global_Data->CurMod.BeginPos ).normalized( QString::NormalizationForm_C );
|
|
||||||
|
|
||||||
QString end = QString::fromUtf8( Global_Data->CurMod.MatchedWord +
|
|
||||||
Global_Data->CurMod.BeginPos ).normalized( QString::NormalizationForm_C );
|
|
||||||
|
|
||||||
wordSeq = begin + end;
|
|
||||||
wordSeqPos = begin.size();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// It's not, so interpret it as in local encoding
|
|
||||||
QString begin = QString::fromLocal8Bit( Global_Data->CurMod.MatchedWord,
|
|
||||||
Global_Data->CurMod.BeginPos ).normalized( QString::NormalizationForm_C );
|
|
||||||
|
|
||||||
QString end = QString::fromLocal8Bit( Global_Data->CurMod.MatchedWord +
|
|
||||||
Global_Data->CurMod.BeginPos ).normalized( QString::NormalizationForm_C );
|
|
||||||
|
|
||||||
wordSeq = begin + end;
|
|
||||||
wordSeqPos = begin.size();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Now locate the word inside the sequence
|
// Now locate the word inside the sequence
|
||||||
|
|
||||||
QString word;
|
QString word;
|
||||||
|
@ -358,7 +220,6 @@ LRESULT CALLBACK MouseOver::eventHandler( HWND hwnd_, UINT msg,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool forcePopup = false;
|
bool forcePopup = false;
|
||||||
forcePopup = emit instance().isGoldenDictWindow( hwnd );
|
|
||||||
emit instance().hovered( word, forcePopup );
|
emit instance().hovered( word, forcePopup );
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -372,15 +233,6 @@ MouseOver::~MouseOver()
|
||||||
{
|
{
|
||||||
#ifdef Q_OS_WIN32
|
#ifdef Q_OS_WIN32
|
||||||
|
|
||||||
disableMouseOver();
|
|
||||||
|
|
||||||
FreeLibrary( spyDll );
|
|
||||||
|
|
||||||
DestroyWindow( GlobalData->ServerWND );
|
|
||||||
|
|
||||||
UnregisterClass( className, GetModuleHandle( 0 ) );
|
|
||||||
|
|
||||||
ThTypes_End();
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>636</width>
|
<width>636</width>
|
||||||
<height>431</height>
|
<height>447</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
|
@ -24,7 +24,7 @@
|
||||||
<item>
|
<item>
|
||||||
<widget class="QTabWidget" name="tabWidget">
|
<widget class="QTabWidget" name="tabWidget">
|
||||||
<property name="currentIndex">
|
<property name="currentIndex">
|
||||||
<number>0</number>
|
<number>6</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="iconSize">
|
<property name="iconSize">
|
||||||
<size>
|
<size>
|
||||||
|
|
|
@ -282,10 +282,6 @@ ScanPopup::ScanPopup( QWidget * parent,
|
||||||
connect( &MouseOver::instance(), SIGNAL( hovered( QString const &, bool ) ),
|
connect( &MouseOver::instance(), SIGNAL( hovered( QString const &, bool ) ),
|
||||||
this, SLOT( mouseHovered( QString const &, bool ) ) );
|
this, SLOT( mouseHovered( QString const &, bool ) ) );
|
||||||
|
|
||||||
#ifdef Q_OS_WIN32
|
|
||||||
connect( &MouseOver::instance(), SIGNAL( isGoldenDictWindow( HWND ) ),
|
|
||||||
this, SIGNAL( isGoldenDictWindow( HWND ) ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
hideTimer.setSingleShot( true );
|
hideTimer.setSingleShot( true );
|
||||||
hideTimer.setInterval( 400 );
|
hideTimer.setInterval( 400 );
|
||||||
|
|
Loading…
Reference in a new issue