Windows: Fix a regression in calibre 6 causing Open With to not extract icons from EXE files. Fixes #1998165 [Enhancement Request: Changing icon of Open With application: Icons from executable](https://bugs.launchpad.net/calibre/+bug/1998165)

More pyqt6 goodness. QImage::fromHICON is not wrapped in PyQt6, so we
wrap it ourselves rather than waiting for PyQt6 to be fixed.
This commit is contained in:
Kovid Goyal 2022-11-30 06:54:34 +05:30
parent 1f7af6dd02
commit 7e7b8e75e6
No known key found for this signature in database
GPG Key ID: 06BC317B515ACE7C
4 changed files with 15 additions and 3 deletions

View File

@ -133,3 +133,13 @@ int
get_image_allocation_limit() { get_image_allocation_limit() {
return QImageReader::allocationLimit(); return QImageReader::allocationLimit();
} }
QImage
image_from_hicon(void* hicon) {
#ifdef Q_OS_WIN
return QImage::fromHICON((HICON)hicon);
#else
(void)hicon;
return QImage();
#endif
}

View File

@ -162,3 +162,4 @@ void set_menu_on_action(QAction* ac, QMenu* menu);
QMenu* menu_for_action(const QAction *ac); QMenu* menu_for_action(const QAction *ac);
void set_image_allocation_limit(int megabytes); void set_image_allocation_limit(int megabytes);
int get_image_allocation_limit(); int get_image_allocation_limit();
QImage image_from_hicon(void* hicon);

View File

@ -89,3 +89,4 @@ void set_menu_on_action(QAction* ac, QMenu* menu);
QMenu* menu_for_action(const QAction *ac); QMenu* menu_for_action(const QAction *ac);
void set_image_allocation_limit(int megabytes); void set_image_allocation_limit(int megabytes);
int get_image_allocation_limit(); int get_image_allocation_limit();
QImage image_from_hicon(void*);

View File

@ -6,17 +6,17 @@ __copyright__ = '2015, Kovid Goyal <kovid at kovidgoyal.net>'
import re import re
import sys import sys
from qt.core import QBuffer, QByteArray, QImage, QIODevice, QPixmap, Qt from qt.core import QBuffer, QByteArray, QIODevice, QPixmap, Qt
from calibre.gui2 import must_use_qt from calibre.gui2 import must_use_qt
from calibre.utils.winreg.default_programs import split_commandline from calibre.utils.winreg.default_programs import split_commandline
from calibre_extensions import winutil from calibre_extensions import winutil, progress_indicator
ICON_SIZE = 256 ICON_SIZE = 256
def hicon_to_pixmap(hicon): def hicon_to_pixmap(hicon):
QPixmap.fromImage(QImage.fromHICON(int(hicon))) return progress_indicator.image_from_hicon(int(hicon))
def pixmap_to_data(pixmap): def pixmap_to_data(pixmap):