Skip to content

Commit 8a24ff6

Browse files
authored
Merge pull request #3780 from GNS3/release/v2.2.56.1
Release v2.2.56.1
2 parents d609088 + 8b2b639 commit 8a24ff6

16 files changed

+47
-32
lines changed

CHANGELOG

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
11
# Change Log
22

3+
## 2.2.56.1 28/01/2026
4+
5+
* Fix line style support for links
6+
* Fix cannot add IOS in preferences
7+
* Fix cannot add IOU in preferences
8+
* Upgrade dependencies
9+
* Drop Python 3.8 support
10+
* Display a warning if a SVG image format isn't supported
11+
* Fix error in profile selection window after PyQt6 migration
12+
313
## 2.2.56 21/01/2026
414

515
* Fixing tab name in MobaXterm

dev-requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
-rrequirements.txt
22

3-
pytest==8.3.2
4-
pytest-timeout==2.3.1
3+
pytest==8.4.2 # version 8.4.2 is the last one supporting Python 3.9
4+
pytest-timeout==2.4.0

gns3/crash_report.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ class CrashReport:
5050
Report crash to a third party service
5151
"""
5252

53-
DSN = "https://f09d966530e45cc56fbe33adc6baeeb8@o19455.ingest.us.sentry.io/38506"
53+
DSN = "https://2173ac82d30385607ee40ae11973e298@o19455.ingest.us.sentry.io/38506"
5454
_instance = None
5555

5656
def __init__(self):

gns3/dialogs/capture_dialog.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424

2525
class CaptureDialog(QtWidgets.QDialog, Ui_CaptureDialog):
2626
"""
27-
This dialog allow configure the packet capture
27+
This dialog allow to configure the packet capture
2828
"""
2929

3030
def __init__(self, parent, file_name, auto_start, ethernet_link=True):

gns3/dialogs/profile_select.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919
import sys
2020
import shutil
2121

22-
from gns3.qt import QtWidgets
22+
from gns3.qt import QtWidgets, QtGui
2323
from gns3.local_config import LocalConfig
2424
from gns3.ui.profile_select_dialog_ui import Ui_ProfileSelectDialog
2525
from gns3.version import __version_info__
@@ -46,7 +46,7 @@ def __init__(self, parent=None):
4646
self.uiDeletePushButton.clicked.connect(self._deletePushButtonSlot)
4747

4848
# Center on screen
49-
screen = QtWidgets.QApplication.desktop().screenGeometry()
49+
screen = QtGui.QGuiApplication.primaryScreen().geometry()
5050
self.move(screen.center() - self.rect().center())
5151

5252
version = "{}.{}".format(__version_info__[0], __version_info__[1])

gns3/dialogs/style_editor_dialog_link.py

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,13 @@ def __init__(self, link, parent):
6565
link.setHovered(True)
6666

6767
self._border_color = pen.color()
68-
self.uiBorderColorPushButton.setStyleSheet("background-color: rgba({}, {}, {}, {});".format(self._border_color.red(),
69-
self._border_color.green(),
70-
self._border_color.blue(),
71-
self._border_color.alpha()))
68+
self.uiBorderColorPushButton.setStyleSheet("background-color: rgba({}, {}, {}, {});".format(
69+
self._border_color.red(),
70+
self._border_color.green(),
71+
self._border_color.blue(),
72+
self._border_color.alpha())
73+
)
74+
7275
self.uiBorderWidthSpinBox.setValue(pen.width())
7376
index = self.uiBorderStyleComboBox.findData(pen.style())
7477
if index != -1:
@@ -102,8 +105,8 @@ def _applyPreferencesSlot(self):
102105
new_link_style = {}
103106
new_link_style["color"] = self._border_color.name()
104107
new_link_style["width"] = self.uiBorderWidthSpinBox.value()
105-
new_link_style["type"] = border_style
106-
108+
new_link_style["type"] = border_style.value
109+
107110
# Store values
108111
self._link.setLinkStyle(new_link_style)
109112
self._link.setHovered(False) # allow to see the new style

gns3/items/ethernet_link_item.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ def adjust(self):
5656
if self._hovered:
5757
self.setPen(QtGui.QPen(QtCore.Qt.GlobalColor.red, self._link._link_style["width"] + 1, QtCore.Qt.PenStyle.SolidLine, QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))
5858
else:
59-
self.setPen(QtGui.QPen(QtGui.QColor(self._link._link_style["color"]), self._link._link_style["width"], self._link._link_style["type"], QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))
59+
self.setPen(QtGui.QPen(QtGui.QColor(self._link._link_style["color"]), self._link._link_style["width"], QtCore.Qt.PenStyle(self._link._link_style["type"]), QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))
6060
except:
6161
if self._hovered:
6262
self.setPen(QtGui.QPen(QtCore.Qt.GlobalColor.red, self._pen_width + 1, QtCore.Qt.PenStyle.SolidLine, QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))

gns3/items/serial_link_item.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ def adjust(self):
5454
if self._hovered:
5555
self.setPen(QtGui.QPen(QtCore.Qt.GlobalColor.red, self._link._link_style["width"] + 1, QtCore.Qt.PenStyle.SolidLine, QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))
5656
else:
57-
self.setPen(QtGui.QPen(QtGui.QColor(self._link._link_style["color"]), self._link._link_style["width"], self._link._link_style["type"], QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))
57+
self.setPen(QtGui.QPen(QtGui.QColor(self._link._link_style["color"]), self._link._link_style["width"], QtCore.Qt.PenStyle(self._link._link_style["type"]), QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))
5858
except:
5959
if self._hovered:
6060
self.setPen(QtGui.QPen(QtCore.Qt.GlobalColor.red, self._pen_width + 1, QtCore.Qt.PenStyle.SolidLine, QtCore.Qt.PenCapStyle.RoundCap, QtCore.Qt.PenJoinStyle.RoundJoin))

gns3/main.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,9 +184,9 @@ def exceptionHook(exception, value, tb):
184184
# catch exceptions to write them in a file
185185
sys.excepthook = exceptionHook
186186

187-
# we only support Python 3 version >= 3.8
188-
if sys.version_info < (3, 8):
189-
raise SystemExit("Python 3.8 or higher is required")
187+
# we only support Python 3 version >= 3.9
188+
if sys.version_info < (3, 9):
189+
raise SystemExit("Python 3.9 or higher is required")
190190

191191
if parse_version(QtCore.QT_VERSION_STR) < parse_version("6.3.1"):
192192
raise SystemExit("Requirement is PyQt6 version 6.3.1 or higher, got version {}".format(QtCore.QT_VERSION_STR))

gns3/main_window.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,12 @@ def __init__(self, parent=None, open_file=None):
194194

195195
self.setWindowTitle("[*] GNS3")
196196

197+
# detect if the SVG module is correctly installed
198+
supported_image_formats = [fmt.data().decode('utf-8') for fmt in QtGui.QImageReader().supportedImageFormats()]
199+
log.debug("Supported image formats: %s", ", ".join(supported_image_formats))
200+
if "svg" not in supported_image_formats:
201+
log.warning("SVG image format is not supported, is the Qt SVG module installed?")
202+
197203
# load initial stuff once the event loop isn't busy
198204
self.run_later(0, self.startupLoading)
199205

0 commit comments

Comments
 (0)