import lshw-B.02.19.2-5.el8

This commit is contained in:
CentOS Sources 2021-05-18 02:39:47 -04:00 committed by Stepan Oksanichenko
parent 2f196ad260
commit cde63b1abb
22 changed files with 2354 additions and 2 deletions

View File

@ -0,0 +1,149 @@
From 71cf63b7bb7bb212580cc7c8e6c75a4f645d79f1 Mon Sep 17 00:00:00 2001
From: Shivaprasad G Bhat <sbhat@linux.ibm.com>
Date: Wed, 20 May 2020 06:27:05 -0500
Subject: [PATCH 01/18] Fix few memory leaks
Valgrind showed some leaks with scandir usage in sysfs.cc.
Patch audits all the scandir usage and fixes where required.
Signed-off-by: Shivaprasad G Bhat <sbhat@linux.ibm.com>
---
src/core/parisc.cc | 10 ++++++----
src/core/spd.cc | 4 ++++
src/core/sysfs.cc | 32 ++++++++++++++++++++++++++++----
3 files changed, 38 insertions(+), 8 deletions(-)
diff --git a/src/core/parisc.cc b/src/core/parisc.cc
index 80344d28c6ba..1e531e32bbc2 100644
--- a/src/core/parisc.cc
+++ b/src/core/parisc.cc
@@ -561,11 +561,13 @@ static bool scan_device(hwNode & node, string name = "")
else
{
for (int i = 0; i < n; i++)
- if(matches(namelist[i]->d_name, "^[0-9]+(:[0-9]+)*$"))
{
- pushd(namelist[i]->d_name);
- scan_device(curnode?*curnode:node, namelist[i]->d_name);
- popd();
+ if(matches(namelist[i]->d_name, "^[0-9]+(:[0-9]+)*$"))
+ {
+ pushd(namelist[i]->d_name);
+ scan_device(curnode?*curnode:node, namelist[i]->d_name);
+ popd();
+ }
free(namelist[i]);
}
free(namelist);
diff --git a/src/core/spd.cc b/src/core/spd.cc
index 061d0fd3e186..a304d061a008 100644
--- a/src/core/spd.cc
+++ b/src/core/spd.cc
@@ -192,8 +192,12 @@ static bool scan_eeproms(hwNode & memory)
return false;
for (int i = 0; i < n; i++)
+ {
if (scan_eeprom(memory, namelist[i]->d_name))
current_bank++;
+ free(namelist[i]);
+ }
+ free(namelist);
return true;
}
diff --git a/src/core/sysfs.cc b/src/core/sysfs.cc
index ee8b1da06c78..4e2df1c9cb09 100644
--- a/src/core/sysfs.cc
+++ b/src/core/sysfs.cc
@@ -83,7 +83,7 @@ static string sysfs_getbustype(const string & path)
{
struct dirent **namelist;
int i, n;
- string devname;
+ string bustype = "";
/*
to determine to which kind of bus a device is connected:
@@ -96,17 +96,28 @@ static string sysfs_getbustype(const string & path)
n = scandir(".", &namelist, selectdir, alphasort);
popd();
+ if (n <= 0)
+ return "";
+
for (i = 0; i < n; i++)
{
- devname =
+ string devname =
string(fs.path + "/bus/") + string(namelist[i]->d_name) +
"/devices/" + basename(path.c_str());
if (samefile(devname, path))
- return string(namelist[i]->d_name);
+ {
+ bustype = string(namelist[i]->d_name);
+ break;
+ }
+ free(namelist[i]);
}
- return "";
+ for (int j = i; j < n; j++)
+ free(namelist[j]);
+ free(namelist);
+
+ return bustype;
}
@@ -405,7 +416,11 @@ vector < entry > entry::devices() const
entry e = sysfs::entry(This->devpath + "/" + string(namelist[i]->d_name));
if(e.hassubdir("subsystem"))
result.push_back(e);
+ free(namelist[i]);
}
+ if (namelist)
+ free(namelist);
+
if(pushd("block"))
{
int count = scandir(".", &namelist, selectdir, alphasort);
@@ -414,7 +429,10 @@ vector < entry > entry::devices() const
entry e = sysfs::entry(This->devpath + "/block/" + string(namelist[i]->d_name));
if(e.hassubdir("subsystem"))
result.push_back(e);
+ free(namelist[i]);
}
+ if (namelist)
+ free(namelist);
popd();
}
popd();
@@ -435,8 +453,11 @@ vector < entry > sysfs::entries_by_bus(const string & busname)
{
entry e = sysfs::entry::byBus(busname, namelist[i]->d_name);
result.push_back(e);
+ free(namelist[i]);
}
popd();
+ if (namelist)
+ free(namelist);
return result;
}
@@ -454,8 +475,11 @@ vector < entry > sysfs::entries_by_class(const string & classname)
{
entry e = sysfs::entry::byClass(classname, namelist[i]->d_name);
result.push_back(e);
+ free(namelist[i]);
}
popd();
+ if (namelist)
+ free(namelist);
return result;
}
--
2.17.1

View File

@ -0,0 +1,36 @@
From 5c4bfb1a4baae1bea11cc9f629bc48ee12e733a7 Mon Sep 17 00:00:00 2001
From: Lyonel Vincent <lyonel@ezix.org>
Date: Sun, 10 Jan 2021 00:38:10 +0100
Subject: [PATCH] Report correct memory size on SMBIOS < 2.7
Github PR#60
---
src/core/dmi.cc | 11 +++++++----
1 file changed, 7 insertions(+), 4 deletions(-)
diff --git a/src/core/dmi.cc b/src/core/dmi.cc
index 30b3ab3b995c..d33d4879bdca 100644
--- a/src/core/dmi.cc
+++ b/src/core/dmi.cc
@@ -1567,10 +1567,13 @@ int dmiversionrev)
// size
u = data[0x0D] << 8 | data[0x0C];
- if(u == 0x7FFF) {
- unsigned long long extendsize = (data[0x1F] << 24) | (data[0x1E] << 16) | (data[0x1D] << 8) | data[0x1C];
- extendsize &= 0x7FFFFFFFUL;
- size = extendsize * 1024ULL * 1024ULL;
+ if ((dmiversionmaj > 2)
+ || ((dmiversionmaj == 2) && (dmiversionmin >= 7))) {
+ if(u == 0x7FFF) {
+ unsigned long long extendsize = (data[0x1F] << 24) | (data[0x1E] << 16) | (data[0x1D] << 8) | data[0x1C];
+ extendsize &= 0x7FFFFFFFUL;
+ size = extendsize * 1024ULL * 1024ULL;
+ }
}
else
if (u != 0xFFFF)
--
2.17.1

View File

@ -0,0 +1,28 @@
From 9c5c2f0706db330114ff4624e0931ac40c1d6fe2 Mon Sep 17 00:00:00 2001
From: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
Date: Wed, 20 Jan 2021 11:28:47 +0530
Subject: [PATCH] devtree: Add UUID property
Add UUID property to PowerVM LPAR.
Signed-off-by: Vasant Hegde <hegdevasant@linux.vnet.ibm.com>
---
src/core/device-tree.cc | 2 ++
1 file changed, 2 insertions(+)
diff --git a/src/core/device-tree.cc b/src/core/device-tree.cc
index d3188c6a8a27..7df6a4ee074c 100644
--- a/src/core/device-tree.cc
+++ b/src/core/device-tree.cc
@@ -1503,6 +1503,8 @@ bool scan_device_tree(hwNode & n)
scan_devtree_bootrom(*core);
if (exists(DEVICETREE "/ibm,lpar-capable")) {
n.setDescription("pSeries LPAR");
+ if (exists( DEVICETREE "/ibm,partition-uuid"))
+ n.setConfig("uuid", get_string(DEVICETREE "/ibm,partition-uuid"));
scan_devtree_cpu_power(*core);
}
else {
--
2.17.1

View File

@ -0,0 +1,96 @@
From ad4ecfd29c29f6895aaf02092e6574299a2b5aa9 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 03:12:51 +0200
Subject: [PATCH 02/18] Build against gtk3 instead of gtk2
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Since gtk2 is on life support, it makes sense to build the gui code with
gtk3 nowadays.
I went for 3.24 because thats the version I have available on my
system, but it is probable that previous versions would also work, I
dont know.
[lijiang added the following comment]
Note: Because rhel8 uses the cmake, update the CMakeLists instead of
Makefile.
In addition, currently, rhel8 only supports the gtk-3.22 instead of
gtk-3.24, so downgrade to gtk-3.22, otherwise the build will fail.
---
README.md | 2 +-
lshw.spec.in | 4 ++--
src/gui/CMakeLists.txt | 6 +++---
src/gui/gtk-lshw.ui | 2 +-
4 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/README.md b/README.md
index 294888c71ff0..cf50e5151228 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ Installation
- cmake, GNU make or Ninja
- an ANSI (or close enough to ANSI compliance) C++ compiler (tested with g++ 2.95.4 and 3.x)
- for the (optional) GTK+ graphical user interface, you will need a
- complete GTK+ development environment (gtk2-devel on RedHat/Fedora derivatives)
+ complete GTK+ development environment (gtk3-devel on RedHat/Fedora derivatives)
- for optional SQLite feature install SQLite
- for optional zlib feature install zlib and gzip
diff --git a/lshw.spec.in b/lshw.spec.in
index 3fe23c2ef360..78018211e1af 100644
--- a/lshw.spec.in
+++ b/lshw.spec.in
@@ -31,8 +31,8 @@ http://lshw.ezix.org/
Summary: HardWare LiSter (GUI version)
Group: Applications/System
Requires: %{name} >= %{version}
-Requires: gtk2 >= 2.4
-BuildRequires: gtk2-devel >= 2.4
+Requires: gtk3 >= 3.22
+BuildRequires: gtk3-devel >= 3.22
%description gui
lshw (Hardware Lister) is a small tool to provide detailed informaton on
diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt
index 34890535a070..34c9e4383c3e 100644
--- a/src/gui/CMakeLists.txt
+++ b/src/gui/CMakeLists.txt
@@ -4,17 +4,17 @@ if(NOT GUI OR STATIC)
endif()
find_package(PkgConfig)
-pkg_check_modules(GTK2 REQUIRED gtk+-2.0 gmodule-2.0)
+pkg_check_modules(GTK3 REQUIRED gtk+-3.0 gmodule-2.0)
file(GLOB GTK_SOURCES "*.c*")
include_directories("${PROJECT_BINARY_DIR}")
include_directories("${PROJECT_SOURCE_DIR}/src/core")
-include_directories("${GTK2_INCLUDE_DIRS}")
+include_directories("${GTK3_INCLUDE_DIRS}")
add_executable(gtk-lshw ${GTK_SOURCES})
-target_link_libraries(gtk-lshw ${SQLITE3_LIBRARIES} ${Z_LIBRARIES} ${GTK2_LIBRARIES} core resolv)
+target_link_libraries(gtk-lshw ${SQLITE3_LIBRARIES} ${Z_LIBRARIES} ${GTK3_LIBRARIES} core resolv)
install(TARGETS gtk-lshw DESTINATION sbin)
if(POLICYKIT)
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index 73fc08a58d1e..25ab1ad03349 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
- <requires lib="gtk+" version="2.22"/>
+ <requires lib="gtk+" version="3.22"/>
<object class="GtkDialog" id="aboutlshw">
<property name="can_focus">False</property>
<property name="title" translatable="yes">About</property>
--
2.17.1

View File

@ -0,0 +1,27 @@
From b79101ccdbb609e3dccfe097952ab2d3d7b55951 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 03:39:46 +0200
Subject: [PATCH 03/18] Remove deprecated stock messages
---
src/gui/gtk-lshw.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c
index 50dfb8329a5c..9ac525c715d8 100644
--- a/src/gui/gtk-lshw.c
+++ b/src/gui/gtk-lshw.c
@@ -31,8 +31,8 @@ main (int argc, char *argv[])
GTK_BUTTONS_NONE,
"Executing this program as a normal user will give incomplete and maybe erroneous information.");
gtk_dialog_add_buttons(GTK_DIALOG(dialog),
- GTK_STOCK_QUIT, GTK_RESPONSE_CANCEL,
- GTK_STOCK_EXECUTE, GTK_RESPONSE_ACCEPT,
+ "_Quit", GTK_RESPONSE_CANCEL,
+ "_Execute", GTK_RESPONSE_ACCEPT,
NULL);
proceed = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT);
--
2.17.1

View File

@ -0,0 +1,44 @@
From 8d696376c0f044507575e933b3e438e104f3ecd2 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 03:40:04 +0200
Subject: [PATCH 04/18] Remove hack which is apparently not useful anymore
---
src/gui/stock.c | 7 -------
1 file changed, 7 deletions(-)
diff --git a/src/gui/stock.c b/src/gui/stock.c
index 08675db8f037..46dfbe7173b5 100644
--- a/src/gui/stock.c
+++ b/src/gui/stock.c
@@ -89,7 +89,6 @@ lshw_gtk_stock_init(void)
static int stock_initted = 0;
GtkIconFactory *icon_factory;
int i;
- GtkWidget *win;
if (stock_initted)
return;
@@ -101,10 +100,6 @@ lshw_gtk_stock_init(void)
gtk_icon_factory_add_default(icon_factory);
-/* Er, yeah, a hack, but it works. :) */
- win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
- gtk_widget_realize(win);
-
for (i = 0; i < G_N_ELEMENTS(stock_icons); i++)
{
GdkPixbuf *pixbuf;
@@ -128,8 +123,6 @@ lshw_gtk_stock_init(void)
}
}
- gtk_widget_destroy(win);
-
/* register logo icon size */
gtk_icon_size_register(LSHW_ICON_SIZE_LOGO, LSHW_DEFAULT_ICON_SIZE, LSHW_DEFAULT_ICON_SIZE);
--
2.17.1

View File

@ -0,0 +1,60 @@
From 41c04d1c5ee84b1f42a9fabf7623a98ff02b9bf1 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 04:37:55 +0200
Subject: [PATCH 05/18] Use GtkFileChooserNative instead of
GtkFileChooserDialog
This class allows it to work even in containers.
---
src/gui/engine.cc | 13 ++++++-------
1 file changed, 6 insertions(+), 7 deletions(-)
diff --git a/src/gui/engine.cc b/src/gui/engine.cc
index 2d2e58bb9a21..21e446e0359d 100644
--- a/src/gui/engine.cc
+++ b/src/gui/engine.cc
@@ -460,7 +460,7 @@ static void redirect_cout(std::ofstream &out, bool enable = true)
void save_as(GtkWidget *mainwindow)
{
struct utsname buf;
- GtkWidget *dialog = NULL;
+ GtkFileChooserNative *dialog = NULL;
GtkWidget *sanitize = NULL;
GtkFileFilter *filter = NULL;
bool proceed = true;
@@ -469,12 +469,11 @@ void save_as(GtkWidget *mainwindow)
if(!computer) // nothing to save
return;
- dialog = gtk_file_chooser_dialog_new ("Save hardware configuration",
+ dialog = gtk_file_chooser_native_new ("Save hardware configuration",
GTK_WINDOW(mainwindow),
GTK_FILE_CHOOSER_ACTION_SAVE,
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT,
- NULL);
+ "_Save",
+ "_Cancel");
//gtk_file_chooser_set_do_overwrite_confirmation (GTK_FILE_CHOOSER (dialog), TRUE);
sanitize = gtk_check_button_new_with_label("Anonymize output");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(sanitize), enabled("output:sanitize")?TRUE:FALSE);
@@ -511,7 +510,7 @@ void save_as(GtkWidget *mainwindow)
if(uname(&buf)==0)
gtk_file_chooser_set_current_name (GTK_FILE_CHOOSER (dialog), buf.nodename);
- if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
+ if (gtk_native_dialog_run (GTK_NATIVE_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT)
{
char *filename;
@@ -603,5 +602,5 @@ void save_as(GtkWidget *mainwindow)
}
}
- gtk_widget_destroy (dialog);
+ g_object_unref (dialog);
}
--
2.17.1

View File

@ -0,0 +1,203 @@
From e342333d936293e82ff889aa6745b93a8c975543 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 05:04:19 +0200
Subject: [PATCH 06/18] Replace deprecated GtkIconFactory with GHashTable
This removes most warnings. A possible further improvement would be to
use GtkIconTheme instead, but it will require reorganising the SVG files
around.
---
src/gui/engine.cc | 3 ++-
src/gui/print-gui.cc | 19 ++++++++-----------
src/gui/print-gui.h | 2 +-
src/gui/stock.c | 26 ++++++--------------------
src/gui/stock.h | 1 -
5 files changed, 17 insertions(+), 34 deletions(-)
diff --git a/src/gui/engine.cc b/src/gui/engine.cc
index 21e446e0359d..c66279e5f498 100644
--- a/src/gui/engine.cc
+++ b/src/gui/engine.cc
@@ -40,6 +40,7 @@ extern GtkWidget *description;
extern GtkWidget *go_up_button;
extern GtkWidget *save_button;
extern GtkWidget *statusbar;
+extern GHashTable *pixbufs;
enum
{
@@ -224,7 +225,7 @@ static void display(GtkWidget * mainwindow)
create_tags(buffer);
string hwpath = gethwpath(*displayed, container);
- printmarkup(*displayed, GTK_TEXT_VIEW(description), hwpath);
+ printmarkup(*displayed, GTK_TEXT_VIEW(description), hwpath, pixbufs);
}
}
diff --git a/src/gui/print-gui.cc b/src/gui/print-gui.cc
index 861ec4c695da..4138424d172e 100644
--- a/src/gui/print-gui.cc
+++ b/src/gui/print-gui.cc
@@ -66,15 +66,12 @@ static void printsize(long long value, const hwNode & node, const string & name,
}
-static void inserticon(const string & icon, const string & comment, GtkTextBuffer *buffer, GtkTextIter &iter, GtkTextView * textview)
+static void inserticon(const string & icon, const string & comment, GtkTextBuffer *buffer, GtkTextIter &iter, GHashTable *pixbufs)
{
GdkPixbuf *pixbuf;
GtkTextTag *tag;
- pixbuf = gtk_widget_render_icon(GTK_WIDGET(textview),
- icon.c_str(),
- gtk_icon_size_from_name(LSHW_ICON_SIZE_LOGO), /* size */
- NULL);
+ pixbuf = GDK_PIXBUF(g_hash_table_lookup(pixbufs, icon.c_str()));
if(!GDK_IS_PIXBUF(pixbuf))
return;
@@ -87,7 +84,7 @@ static void inserticon(const string & icon, const string & comment, GtkTextBuff
}
-void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath)
+void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath, GHashTable *pixbufs)
{
vector < string > config;
vector < string > resources;
@@ -125,13 +122,13 @@ void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpa
gtk_text_buffer_insert (buffer, &iter, "\n", -1);
if(node.getHint("icon").defined())
- inserticon(string("lshw-") + node.getHint("icon").asString(), "", buffer, iter, textview);
+ inserticon(string("lshw-") + node.getHint("icon").asString(), "", buffer, iter, pixbufs);
if(node.getHint("bus.icon").defined())
- inserticon(string("lshw-") + node.getHint("bus.icon").asString(), "", buffer, iter, textview);
+ inserticon(string("lshw-") + node.getHint("bus.icon").asString(), "", buffer, iter, pixbufs);
if(node.getHint("logo").defined())
- inserticon(string("lshw-") + node.getHint("logo").asString(), "", buffer, iter, textview);
+ inserticon(string("lshw-") + node.getHint("logo").asString(), "", buffer, iter, pixbufs);
gtk_text_buffer_insert (buffer, &iter, "\n\n", -1);
@@ -218,10 +215,10 @@ void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpa
gtk_text_buffer_insert (buffer, &iter, "\n", -1);
if(!node.claimed())
- inserticon(LSHW_STOCK_DISABLED, _("this device hasn't been claimed\n"), buffer, iter, textview);
+ inserticon(LSHW_STOCK_DISABLED, _("this device hasn't been claimed\n"), buffer, iter, pixbufs);
if(!node.enabled())
- inserticon(LSHW_STOCK_DISABLED, _("this device has been disabled\n"), buffer, iter, textview);
+ inserticon(LSHW_STOCK_DISABLED, _("this device has been disabled\n"), buffer, iter, pixbufs);
(void) &id; // avoid "id defined but not used" warning
}
diff --git a/src/gui/print-gui.h b/src/gui/print-gui.h
index 055f7cdf3087..d41946161f02 100644
--- a/src/gui/print-gui.h
+++ b/src/gui/print-gui.h
@@ -4,7 +4,7 @@
#include "hw.h"
#include <gtk/gtk.h>
-void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath);
+void printmarkup(const hwNode & node, GtkTextView *textview, const string & hwpath, GHashTable *pixbufs);
string gethwpath(hwNode & node, hwNode & base);
#endif
diff --git a/src/gui/stock.c b/src/gui/stock.c
index 46dfbe7173b5..9e7c3664427a 100644
--- a/src/gui/stock.c
+++ b/src/gui/stock.c
@@ -16,6 +16,7 @@ GtkWidget *description = NULL;
GtkWidget *go_up_button = NULL;
GtkWidget *save_button = NULL;
GtkWidget *statusbar = NULL;
+GHashTable *pixbufs = NULL;
static struct StockIcon
{
@@ -87,7 +88,6 @@ void
lshw_gtk_stock_init(void)
{
static int stock_initted = 0;
- GtkIconFactory *icon_factory;
int i;
if (stock_initted)
@@ -95,15 +95,12 @@ lshw_gtk_stock_init(void)
stock_initted = 1;
-/* Setup the icon factory. */
- icon_factory = gtk_icon_factory_new();
-
- gtk_icon_factory_add_default(icon_factory);
+/* Setup the icons hash table. */
+ pixbufs = g_hash_table_new(g_str_hash, g_str_equal);
for (i = 0; i < G_N_ELEMENTS(stock_icons); i++)
{
GdkPixbuf *pixbuf;
- GtkIconSet *iconset;
gchar *filename;
filename = find_file(stock_icons[i].filename, "artwork");
@@ -111,23 +108,15 @@ lshw_gtk_stock_init(void)
if (filename == NULL)
continue;
- pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
+ pixbuf = gdk_pixbuf_new_from_file_at_size(filename, LSHW_DEFAULT_ICON_SIZE, LSHW_DEFAULT_ICON_SIZE, NULL);
g_free(filename);
if(pixbuf) /* we managed to load something */
{
- iconset = gtk_icon_set_new_from_pixbuf(pixbuf);
- g_object_unref(G_OBJECT(pixbuf));
- gtk_icon_factory_add(icon_factory, stock_icons[i].name, iconset);
- gtk_icon_set_unref(iconset);
+ g_hash_table_insert(pixbufs, (char*)stock_icons[i].name, pixbuf);
}
}
-/* register logo icon size */
- gtk_icon_size_register(LSHW_ICON_SIZE_LOGO, LSHW_DEFAULT_ICON_SIZE, LSHW_DEFAULT_ICON_SIZE);
-
- g_object_unref(G_OBJECT(icon_factory));
-
(void) &id; /* avoid "id defined but not used" warning */
}
@@ -168,10 +157,7 @@ void lshw_ui_init(void)
gtk_builder_connect_signals( builder, mainwindow );
g_object_unref( G_OBJECT( builder ) );
- icon = gtk_widget_render_icon(GTK_WIDGET(mainwindow),
- "lshw-logo",
- GTK_ICON_SIZE_DIALOG,
- NULL);
+ icon = g_hash_table_lookup(pixbufs, LSHW_STOCK_LOGO);
if(GDK_IS_PIXBUF(icon))
{
gtk_window_set_icon(GTK_WINDOW(mainwindow), icon);
diff --git a/src/gui/stock.h b/src/gui/stock.h
index a0fef5b882b2..58f788e5b573 100644
--- a/src/gui/stock.h
+++ b/src/gui/stock.h
@@ -43,7 +43,6 @@
/**
* For getting the icon size for the logo
*/
-#define LSHW_ICON_SIZE_LOGO "lshw-icon-size-logo"
#define LSHW_DEFAULT_ICON_SIZE 40
void lshw_gtk_stock_init(void);
--
2.17.1

View File

@ -0,0 +1,29 @@
From 8ff4b056e8fd371dca868f8967b36c6e9a4590ab Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 05:06:38 +0200
Subject: [PATCH 07/18] Replace the last GtkStock in overwrite dialog
Also add a mnemonic for better keyboard access to the overwrite button.
---
src/gui/engine.cc | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/gui/engine.cc b/src/gui/engine.cc
index c66279e5f498..ff0607490673 100644
--- a/src/gui/engine.cc
+++ b/src/gui/engine.cc
@@ -556,8 +556,8 @@ void save_as(GtkWidget *mainwindow)
"A file named <i><tt>%s</tt></i> already exists in folder <tt>%s</tt>.\n\nDo you want to overwrite it?",
basename(buffer1), dirname(buffer2));
gtk_dialog_add_buttons(GTK_DIALOG(dialog),
- GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
- "Overwrite", GTK_RESPONSE_ACCEPT,
+ "_Cancel", GTK_RESPONSE_CANCEL,
+ "_Overwrite", GTK_RESPONSE_ACCEPT,
NULL);
proceed = (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT);
gtk_widget_destroy (dialog);
--
2.17.1

View File

@ -0,0 +1,48 @@
From 0a290c29faa083767698d77b3454ca08fe2a71eb Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 05:18:25 +0200
Subject: [PATCH 08/18] Remove deprecated widgets
---
src/gui/gtk-lshw.ui | 9 ++++++---
1 file changed, 6 insertions(+), 3 deletions(-)
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index 25ab1ad03349..5f21da08e8e1 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -114,9 +114,10 @@
<signal name="delete-event" handler="gtk_main_quit" swapped="no"/>
<signal name="map" handler="on_lshw_map" after="yes" swapped="no"/>
<child>
- <object class="GtkVBox" id="vbox1">
+ <object class="GtkBox" id="main-box">
<property name="visible">True</property>
<property name="can_focus">False</property>
+ <property name="orientation">GTK_ORIENTATION_VERTICAL</property>
<child>
<object class="GtkMenuBar" id="menubar1">
<property name="visible">True</property>
@@ -292,15 +293,17 @@
</packing>
</child>
<child>
- <object class="GtkHPaned" id="hpaned1">
+ <object class="GtkPaned" id="paned">
<property name="visible">True</property>
<property name="can_focus">True</property>
+ <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
<child>
- <object class="GtkHBox" id="hbox3">
+ <object class="GtkBox" id="tree-box">
<property name="width_request">350</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="homogeneous">True</property>
+ <property name="orientation">GTK_ORIENTATION_HORIZONTAL</property>
<child>
<object class="GtkScrolledWindow" id="scrolledwindow2">
<property name="visible">True</property>
--
2.17.1

View File

@ -0,0 +1,128 @@
From 6cf78e942827dd01b91607704c7bfad9a1a1541d Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 06:45:43 +0200
Subject: [PATCH 09/18] Remove deprecated use_action_appearance property
---
src/gui/gtk-lshw.ui | 14 --------------
1 file changed, 14 deletions(-)
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index 5f21da08e8e1..1656f80ddd53 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -27,7 +27,6 @@
<property name="can_focus">True</property>
<property name="can_default">True</property>
<property name="receives_default">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_aboutclose_activate" swapped="no"/>
<signal name="clicked" handler="on_aboutclose_activate" swapped="no"/>
@@ -73,7 +72,6 @@
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="has_tooltip">True</property>
- <property name="use_action_appearance">False</property>
<property name="relief">none</property>
<property name="uri">http://www.ezix.org/</property>
</object>
@@ -126,7 +124,6 @@
<object class="GtkMenuItem" id="menuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_File</property>
<property name="use_underline">True</property>
<child type="submenu">
@@ -138,7 +135,6 @@
<property name="label">gtk-save</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_save_activate" swapped="no"/>
@@ -148,7 +144,6 @@
<object class="GtkSeparatorMenuItem" id="separatormenuitem1">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
</object>
</child>
<child>
@@ -156,7 +151,6 @@
<property name="label">gtk-quit</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="gtk_main_quit" swapped="no"/>
@@ -170,7 +164,6 @@
<object class="GtkMenuItem" id="menuitem3">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_View</property>
<property name="use_underline">True</property>
<child type="submenu">
@@ -182,7 +175,6 @@
<property name="label">gtk-refresh</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="refresh_display" swapped="no"/>
@@ -196,7 +188,6 @@
<object class="GtkMenuItem" id="menuitem4">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="label" translatable="yes">_Help</property>
<property name="use_underline">True</property>
<child type="submenu">
@@ -208,7 +199,6 @@
<property name="label">gtk-about</property>
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
<signal name="activate" handler="on_about1_activate" swapped="no"/>
@@ -235,7 +225,6 @@
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="stock_id">gtk-go-up</property>
<signal name="clicked" handler="go_up" swapped="no"/>
</object>
@@ -249,7 +238,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Rescan the hardware</property>
- <property name="use_action_appearance">False</property>
<property name="stock_id">gtk-refresh</property>
<signal name="clicked" handler="refresh_display" swapped="no"/>
</object>
@@ -263,7 +251,6 @@
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="stock_id">gtk-save</property>
<signal name="clicked" handler="on_savebutton_clicked" swapped="no"/>
</object>
@@ -276,7 +263,6 @@
<object class="GtkToolButton" id="quitbutton">
<property name="visible">True</property>
<property name="can_focus">False</property>
- <property name="use_action_appearance">False</property>
<property name="stock_id">gtk-quit</property>
<signal name="clicked" handler="gtk_main_quit" swapped="no"/>
</object>
--
2.17.1

View File

@ -0,0 +1,99 @@
From 5fd82e398ba94766f0981f97988c8f14ab4297c5 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 05:53:57 +0200
Subject: [PATCH 10/18] Move to GtkApplication
This will eventually let us use GActions to build our menus and buttons.
---
src/gui/gtk-lshw.c | 36 ++++++++++++++++++++++--------------
src/gui/gtk-lshw.ui | 3 +--
2 files changed, 23 insertions(+), 16 deletions(-)
diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c
index 9ac525c715d8..6c0f0bbdf77f 100644
--- a/src/gui/gtk-lshw.c
+++ b/src/gui/gtk-lshw.c
@@ -11,17 +11,10 @@ static char *id = "@(#) $Id$";
extern GtkWidget *mainwindow;
-int
-main (int argc, char *argv[])
+static void
+activate (GApplication *app,
+ gpointer user_data)
{
-#ifndef NONLS
- bindtextdomain (PACKAGE, LOCALEDIR);
- bind_textdomain_codeset (PACKAGE, "UTF-8");
- textdomain (PACKAGE);
-#endif
-
- gtk_init (&argc, &argv);
-
if(geteuid() != 0)
{
bool proceed = false;
@@ -39,19 +32,34 @@ main (int argc, char *argv[])
gtk_widget_destroy (dialog);
if(!proceed)
- return -1;
+ return;
}
lshw_gtk_stock_init();
lshw_ui_init();
if(!mainwindow)
- return(1);
+ return;
gtk_widget_show(mainwindow);
- gtk_main ();
+ gtk_application_add_window(GTK_APPLICATION(app), GTK_WINDOW(mainwindow));
+}
+
+int
+main (int argc, char *argv[])
+{
+#ifndef NONLS
+ bindtextdomain (PACKAGE, LOCALEDIR);
+ bind_textdomain_codeset (PACKAGE, "UTF-8");
+ textdomain (PACKAGE);
+#endif
+
+ GtkApplication *app = gtk_application_new ("org.ezix.gtk-lshw", G_APPLICATION_FLAGS_NONE);
+ g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
+ int status = g_application_run (G_APPLICATION (app), argc, argv);
+ g_object_unref (app);
(void) &id; // avoid warning "id defined but not used"
- return 0;
+ return status;
}
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index 1656f80ddd53..7504c76d1a1b 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -102,14 +102,13 @@
<action-widget response="-7">closebutton1</action-widget>
</action-widgets>
</object>
- <object class="GtkWindow" id="mainwindow">
+ <object class="GtkApplicationWindow" id="mainwindow">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">lshw</property>
<property name="default_width">700</property>
<property name="default_height">480</property>
<property name="startup_id">org.ezix.gtk-lshw</property>
- <signal name="delete-event" handler="gtk_main_quit" swapped="no"/>
<signal name="map" handler="on_lshw_map" after="yes" swapped="no"/>
<child>
<object class="GtkBox" id="main-box">
--
2.17.1

View File

@ -0,0 +1,279 @@
From d1690196a9007568bfce3847841ea2b509eb3150 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Fri, 10 Jul 2020 06:28:06 +0200
Subject: [PATCH 11/18] Replace signals with GSimpleActions
This unifies actions pertaining to the application.
---
src/gui/callbacks.c | 62 ++++++++++++++++++++++-----------------------
src/gui/callbacks.h | 35 ++++++++++++++++---------
src/gui/gtk-lshw.c | 14 ++++++++++
src/gui/gtk-lshw.ui | 16 ++++++------
4 files changed, 76 insertions(+), 51 deletions(-)
diff --git a/src/gui/callbacks.c b/src/gui/callbacks.c
index f8aa0cb0f968..eec3e5571741 100644
--- a/src/gui/callbacks.c
+++ b/src/gui/callbacks.c
@@ -17,17 +17,36 @@ static char *id = "@(#) $Id$";
G_MODULE_EXPORT
void
-refresh_display (GtkMenuItem *menuitem,
-gpointer user_data)
+on_go_up_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ go_back(mainwindow);
+}
+
+G_MODULE_EXPORT
+void
+on_refresh_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
{
refresh(mainwindow);
}
+G_MODULE_EXPORT
+void
+on_save_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ save_as(mainwindow);
+}
G_MODULE_EXPORT
void
-on_about1_activate (GtkMenuItem *menuitem,
-gpointer user_data)
+on_about_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
{
if(GTK_IS_WIDGET(about))
{
@@ -35,6 +54,14 @@ gpointer user_data)
}
}
+G_MODULE_EXPORT
+void
+on_quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit(G_APPLICATION(app));
+}
G_MODULE_EXPORT
void
@@ -147,15 +174,6 @@ gpointer user_data)
}
-G_MODULE_EXPORT
-void
-go_up (GtkToolButton *toolbutton,
-gpointer user_data)
-{
- go_back(mainwindow);
-}
-
-
G_MODULE_EXPORT
void
on_lshw_map (GtkWidget *widget,
@@ -163,21 +181,3 @@ gpointer user_data)
{
refresh(mainwindow);
}
-
-G_MODULE_EXPORT
-void
-on_save_activate (GtkMenuItem *menuitem,
- gpointer user_data)
-{
- save_as(mainwindow);
-}
-
-
-G_MODULE_EXPORT
-void
-on_savebutton_clicked (GtkToolButton *toolbutton,
- gpointer user_data)
-{
- on_save_activate(NULL, NULL);
-}
-
diff --git a/src/gui/callbacks.h b/src/gui/callbacks.h
index cc856e45ddb4..b9b9141c0eb7 100644
--- a/src/gui/callbacks.h
+++ b/src/gui/callbacks.h
@@ -1,8 +1,29 @@
#include <gtk/gtk.h>
-void refresh_display (GtkMenuItem * menuitem, gpointer user_data);
+void
+on_go_up_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app);
+
+void
+on_refresh_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app);
-void on_about1_activate (GtkMenuItem * menuitem, gpointer user_data);
+void
+on_save_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app);
+
+void
+on_about_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app);
+
+void
+on_quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app);
void on_aboutclose_activate (GtkButton * button, gpointer user_data);
@@ -35,14 +56,4 @@ void on_treeview2_cursor_changed (GtkTreeView * treeview, gpointer user_data);
void on_treeview3_cursor_changed (GtkTreeView * treeview, gpointer user_data);
-void go_up (GtkToolButton * toolbutton, gpointer user_data);
-
void on_lshw_map (GtkWidget * widget, gpointer user_data);
-
-void
-on_save_activate (GtkMenuItem *menuitem,
- gpointer user_data);
-
-void
-on_savebutton_clicked (GtkToolButton *toolbutton,
- gpointer user_data);
diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c
index 6c0f0bbdf77f..0dc3aff6d322 100644
--- a/src/gui/gtk-lshw.c
+++ b/src/gui/gtk-lshw.c
@@ -6,11 +6,21 @@
#include "config.h"
#include "stock.h"
#include "engine.h"
+#include "callbacks.h"
static char *id = "@(#) $Id$";
extern GtkWidget *mainwindow;
+static GActionEntry app_entries[] =
+{
+ { "go_up", on_go_up_activated, NULL, NULL, NULL },
+ { "refresh", on_refresh_activated, NULL, NULL, NULL },
+ { "save", on_save_activated, NULL, NULL, NULL },
+ { "about", on_about_activated, NULL, NULL, NULL },
+ { "quit", on_quit_activated, NULL, NULL, NULL }
+};
+
static void
activate (GApplication *app,
gpointer user_data)
@@ -35,6 +45,10 @@ activate (GApplication *app,
return;
}
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ app_entries, G_N_ELEMENTS (app_entries),
+ app);
+
lshw_gtk_stock_init();
lshw_ui_init();
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index 7504c76d1a1b..d24e05c3aa20 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -136,7 +136,7 @@
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
- <signal name="activate" handler="on_save_activate" swapped="no"/>
+ <property name="action_name">app.save</property>
</object>
</child>
<child>
@@ -152,7 +152,7 @@
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
- <signal name="activate" handler="gtk_main_quit" swapped="no"/>
+ <property name="action_name">app.quit</property>
</object>
</child>
</object>
@@ -176,7 +176,7 @@
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
- <signal name="activate" handler="refresh_display" swapped="no"/>
+ <property name="action_name">app.refresh</property>
</object>
</child>
</object>
@@ -200,7 +200,7 @@
<property name="can_focus">False</property>
<property name="use_underline">True</property>
<property name="use_stock">True</property>
- <signal name="activate" handler="on_about1_activate" swapped="no"/>
+ <property name="action_name">app.about</property>
</object>
</child>
</object>
@@ -225,7 +225,7 @@
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="stock_id">gtk-go-up</property>
- <signal name="clicked" handler="go_up" swapped="no"/>
+ <property name="action_name">app.go_up</property>
</object>
<packing>
<property name="expand">False</property>
@@ -238,7 +238,7 @@
<property name="can_focus">False</property>
<property name="tooltip_text" translatable="yes">Rescan the hardware</property>
<property name="stock_id">gtk-refresh</property>
- <signal name="clicked" handler="refresh_display" swapped="no"/>
+ <property name="action_name">app.refresh</property>
</object>
<packing>
<property name="expand">False</property>
@@ -251,7 +251,7 @@
<property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="stock_id">gtk-save</property>
- <signal name="clicked" handler="on_savebutton_clicked" swapped="no"/>
+ <property name="action_name">app.save</property>
</object>
<packing>
<property name="expand">False</property>
@@ -263,7 +263,7 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="stock_id">gtk-quit</property>
- <signal name="clicked" handler="gtk_main_quit" swapped="no"/>
+ <property name="action_name">app.quit</property>
</object>
<packing>
<property name="expand">False</property>
--
2.17.1

View File

@ -0,0 +1,154 @@
From a116b319adf51d4eafcb264de027647244340708 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Wed, 15 Jul 2020 17:32:45 +0200
Subject: [PATCH 12/18] Enable/Disable GSimpleAction instead of button
sensitivity
This also fixes the Save menu item not having been disabled properly.
---
src/gui/engine.cc | 24 +++++++-----------------
src/gui/gtk-lshw.c | 7 +++++++
src/gui/gtk-lshw.ui | 2 --
src/gui/stock.c | 4 ----
4 files changed, 14 insertions(+), 23 deletions(-)
diff --git a/src/gui/engine.cc b/src/gui/engine.cc
index ff0607490673..2962ec80d81a 100644
--- a/src/gui/engine.cc
+++ b/src/gui/engine.cc
@@ -37,10 +37,10 @@ static hwNode *selected3 = NULL;
extern GtkWidget *mainwindow;
extern GtkWidget *list1, *list2, *list3;
extern GtkWidget *description;
-extern GtkWidget *go_up_button;
-extern GtkWidget *save_button;
extern GtkWidget *statusbar;
extern GHashTable *pixbufs;
+extern GSimpleAction *go_up_action;
+extern GSimpleAction *save_action;
enum
{
@@ -251,14 +251,11 @@ void refresh(GtkWidget *mainwindow)
{
hwNode computer("computer", hw::system);
static bool lock = false;
- //GtkWidget * menu = lookup_widget(mainwindow, "menu");
- //GtkWidget * save_menuitem = lookup_widget(menu, "save");
if(lock) return;
lock = true;
- gtk_widget_set_sensitive(save_button, FALSE);
- //gtk_widget_set_sensitive(save_menuitem, FALSE);
+ g_simple_action_set_enabled(save_action, FALSE);
populate_sublist(list1, NULL);
populate_sublist(list2, NULL);
@@ -273,9 +270,8 @@ void refresh(GtkWidget *mainwindow)
status(NULL);
displayed = container.addChild(computer);
- gtk_widget_set_sensitive(go_up_button, FALSE);
- gtk_widget_set_sensitive(save_button, TRUE);
- //gtk_widget_set_sensitive(save_menuitem, TRUE);
+ g_simple_action_set_enabled(go_up_action, FALSE);
+ g_simple_action_set_enabled(save_action, TRUE);
selected1 = NULL;
selected2 = NULL;
@@ -379,10 +375,7 @@ void browse(unsigned list, GtkTreeView *treeview)
break;
}
- if(selected1 && (find_parent(selected1, &container)!= &container))
- gtk_widget_set_sensitive(go_up_button, 1);
- else
- gtk_widget_set_sensitive(go_up_button, 0);
+ g_simple_action_set_enabled(go_up_action, selected1 && (find_parent(selected1, &container)!= &container));
(void) &::id; // avoid warning "id defined but not used"
}
@@ -404,10 +397,7 @@ void go_back(GtkWidget *mainwindow)
displayed = find_parent(displayed, &container);
}
- if(selected1 && (find_parent(selected1, &container)!= &container))
- gtk_widget_set_sensitive(go_up_button, 1);
- else
- gtk_widget_set_sensitive(go_up_button, 0);
+ g_simple_action_set_enabled(go_up_action, selected1 && (find_parent(selected1, &container)!= &container));
display(mainwindow);
}
diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c
index 0dc3aff6d322..7b91ec5e4f01 100644
--- a/src/gui/gtk-lshw.c
+++ b/src/gui/gtk-lshw.c
@@ -11,6 +11,8 @@
static char *id = "@(#) $Id$";
extern GtkWidget *mainwindow;
+GSimpleAction *go_up_action;
+GSimpleAction *save_action;
static GActionEntry app_entries[] =
{
@@ -48,6 +50,11 @@ activate (GApplication *app,
g_action_map_add_action_entries (G_ACTION_MAP (app),
app_entries, G_N_ELEMENTS (app_entries),
app);
+ go_up_action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (app), "go_up"));
+ save_action = G_SIMPLE_ACTION (g_action_map_lookup_action (G_ACTION_MAP (app), "save"));
+
+ g_simple_action_set_enabled(go_up_action, FALSE);
+ g_simple_action_set_enabled(save_action, FALSE);
lshw_gtk_stock_init();
lshw_ui_init();
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index d24e05c3aa20..76fcd19379f2 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -222,7 +222,6 @@
<child>
<object class="GtkToolButton" id="upbutton">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="stock_id">gtk-go-up</property>
<property name="action_name">app.go_up</property>
@@ -248,7 +247,6 @@
<child>
<object class="GtkToolButton" id="savebutton">
<property name="visible">True</property>
- <property name="sensitive">False</property>
<property name="can_focus">False</property>
<property name="stock_id">gtk-save</property>
<property name="action_name">app.save</property>
diff --git a/src/gui/stock.c b/src/gui/stock.c
index 9e7c3664427a..fa18f9ed7f85 100644
--- a/src/gui/stock.c
+++ b/src/gui/stock.c
@@ -13,8 +13,6 @@ GtkWidget *list1 = NULL;
GtkWidget *list2 = NULL;
GtkWidget *list3 = NULL;
GtkWidget *description = NULL;
-GtkWidget *go_up_button = NULL;
-GtkWidget *save_button = NULL;
GtkWidget *statusbar = NULL;
GHashTable *pixbufs = NULL;
@@ -151,8 +149,6 @@ void lshw_ui_init(void)
list2 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview2"));
list3 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview3"));
description = GTK_WIDGET(gtk_builder_get_object( builder, "description"));
- go_up_button = GTK_WIDGET(gtk_builder_get_object( builder, "upbutton"));
- save_button = GTK_WIDGET(gtk_builder_get_object( builder, "savebutton"));
statusbar = GTK_WIDGET(gtk_builder_get_object( builder, "statusbar"));
gtk_builder_connect_signals( builder, mainwindow );
g_object_unref( G_OBJECT( builder ) );
--
2.17.1

View File

@ -0,0 +1,240 @@
From bc5046d9917fe9cf84dd899f90aef5b90b7d4b04 Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Wed, 15 Jul 2020 16:54:27 +0200
Subject: [PATCH 13/18] Move from GtkMenuBar to GMenu
This moves forward with gtk4 support, while also allowing a global menu
for environments which use one, such as GNOME.
I also added shortcuts so that users can press ^Q, ^R and ^S to quit,
refresh and save.
---
src/gui/gtk-lshw.c | 2 +-
src/gui/gtk-lshw.ui | 138 ++++++++++++--------------------------------
src/gui/stock.c | 6 +-
src/gui/stock.h | 4 +-
4 files changed, 47 insertions(+), 103 deletions(-)
diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c
index 7b91ec5e4f01..d3e531c4ceb3 100644
--- a/src/gui/gtk-lshw.c
+++ b/src/gui/gtk-lshw.c
@@ -57,7 +57,7 @@ activate (GApplication *app,
g_simple_action_set_enabled(save_action, FALSE);
lshw_gtk_stock_init();
- lshw_ui_init();
+ lshw_ui_init(GTK_APPLICATION(app));
if(!mainwindow)
return;
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index 76fcd19379f2..cf9d678f00d9 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -103,7 +103,6 @@
</action-widgets>
</object>
<object class="GtkApplicationWindow" id="mainwindow">
- <property name="visible">True</property>
<property name="can_focus">False</property>
<property name="title" translatable="yes">lshw</property>
<property name="default_width">700</property>
@@ -115,105 +114,6 @@
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="orientation">GTK_ORIENTATION_VERTICAL</property>
- <child>
- <object class="GtkMenuBar" id="menubar1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkMenuItem" id="menuitem1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_File</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="menu1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="savemenu">
- <property name="label">gtk-save</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <property name="action_name">app.save</property>
- </object>
- </child>
- <child>
- <object class="GtkSeparatorMenuItem" id="separatormenuitem1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- </object>
- </child>
- <child>
- <object class="GtkImageMenuItem" id="imagemenuitem5">
- <property name="label">gtk-quit</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <property name="action_name">app.quit</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="menuitem3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_View</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="menu2">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="refresh1">
- <property name="label">gtk-refresh</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <property name="action_name">app.refresh</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- <child>
- <object class="GtkMenuItem" id="menuitem4">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">_Help</property>
- <property name="use_underline">True</property>
- <child type="submenu">
- <object class="GtkMenu" id="menu3">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <child>
- <object class="GtkImageMenuItem" id="imagemenuitem10">
- <property name="label">gtk-about</property>
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="use_underline">True</property>
- <property name="use_stock">True</property>
- <property name="action_name">app.about</property>
- </object>
- </child>
- </object>
- </child>
- </object>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
<child>
<object class="GtkToolbar" id="toolbar1">
<property name="visible">True</property>
@@ -423,4 +323,42 @@
</object>
</child>
</object>
+ <menu id="menubar">
+ <submenu>
+ <attribute name="label" translatable="yes">_File</attribute>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Save</attribute>
+ <attribute name="action">app.save</attribute>
+ <attribute name="accel">&lt;Control&gt;s</attribute>
+ </item>
+ </section>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Quit</attribute>
+ <attribute name="action">app.quit</attribute>
+ <attribute name="accel">&lt;Control&gt;q</attribute>
+ </item>
+ </section>
+ </submenu>
+ <submenu>
+ <attribute name="label" translatable="yes">_View</attribute>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_Refresh</attribute>
+ <attribute name="action">app.refresh</attribute>
+ <attribute name="accel">&lt;Control&gt;r</attribute>
+ </item>
+ </section>
+ </submenu>
+ <submenu>
+ <attribute name="label" translatable="yes">_Help</attribute>
+ <section>
+ <item>
+ <attribute name="label" translatable="yes">_About</attribute>
+ <attribute name="action">app.about</attribute>
+ </item>
+ </section>
+ </submenu>
+ </menu>
</interface>
diff --git a/src/gui/stock.c b/src/gui/stock.c
index fa18f9ed7f85..ce0b42abea58 100644
--- a/src/gui/stock.c
+++ b/src/gui/stock.c
@@ -14,6 +14,7 @@ GtkWidget *list2 = NULL;
GtkWidget *list3 = NULL;
GtkWidget *description = NULL;
GtkWidget *statusbar = NULL;
+GMenuModel *menubar = NULL;
GHashTable *pixbufs = NULL;
static struct StockIcon
@@ -118,7 +119,7 @@ lshw_gtk_stock_init(void)
(void) &id; /* avoid "id defined but not used" warning */
}
-void lshw_ui_init(void)
+void lshw_ui_init(GtkApplication *app)
{
GError *error = NULL;
GtkBuilder *builder = NULL;
@@ -151,6 +152,9 @@ void lshw_ui_init(void)
description = GTK_WIDGET(gtk_builder_get_object( builder, "description"));
statusbar = GTK_WIDGET(gtk_builder_get_object( builder, "statusbar"));
gtk_builder_connect_signals( builder, mainwindow );
+ menubar = G_MENU_MODEL( gtk_builder_get_object( builder, "menubar"));
+ gtk_window_set_application( GTK_WINDOW( mainwindow ), app );
+ gtk_application_set_menubar( app, menubar );
g_object_unref( G_OBJECT( builder ) );
icon = g_hash_table_lookup(pixbufs, LSHW_STOCK_LOGO);
diff --git a/src/gui/stock.h b/src/gui/stock.h
index 58f788e5b573..1c732dfb541e 100644
--- a/src/gui/stock.h
+++ b/src/gui/stock.h
@@ -45,6 +45,8 @@
*/
#define LSHW_DEFAULT_ICON_SIZE 40
+typedef struct _GtkApplication GtkApplication;
+
void lshw_gtk_stock_init(void);
-void lshw_ui_init(void);
+void lshw_ui_init(GtkApplication *);
#endif /* _STOCK_H_ */
--
2.17.1

View File

@ -0,0 +1,252 @@
From e96f82ce459a6d503f70d6c7b0f762bf0d133edf Mon Sep 17 00:00:00 2001
From: Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
Date: Sat, 1 Aug 2020 15:03:23 +0200
Subject: [PATCH 14/18] Replace the about GtkDialog with a GtkAboutDialog
This reduces the amount of code needed for this feature, and integrates
better with the rest of the system.
---
src/gui/callbacks.c | 46 ++++++--------------
src/gui/callbacks.h | 4 --
src/gui/gtk-lshw.ui | 101 --------------------------------------------
src/gui/stock.c | 2 -
4 files changed, 12 insertions(+), 141 deletions(-)
diff --git a/src/gui/callbacks.c b/src/gui/callbacks.c
index eec3e5571741..b108777fe11f 100644
--- a/src/gui/callbacks.c
+++ b/src/gui/callbacks.c
@@ -10,7 +10,6 @@
#include "engine.h"
#include <string.h>
-extern GtkWidget *about;
extern GtkWidget *mainwindow;
static char *id = "@(#) $Id$";
@@ -42,18 +41,6 @@ on_save_activated (GSimpleAction *action,
save_as(mainwindow);
}
-G_MODULE_EXPORT
-void
-on_about_activated (GSimpleAction *action,
- GVariant *parameter,
- gpointer app)
-{
- if(GTK_IS_WIDGET(about))
- {
- gtk_widget_show(about);
- }
-}
-
G_MODULE_EXPORT
void
on_quit_activated (GSimpleAction *action,
@@ -65,25 +52,20 @@ on_quit_activated (GSimpleAction *action,
G_MODULE_EXPORT
void
-on_aboutclose_activate (GtkButton *button,
-gpointer user_data)
+on_about_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
{
- if(GTK_IS_WIDGET(about))
- {
- gtk_widget_hide(about);
- }
-}
-
+ gtk_show_about_dialog(GTK_WINDOW(mainwindow),
+ "program-name", "GTK+ frontend for lshw",
+ "website", "https://www.ezix.org/",
+ "copyright", "© 2004-2011 Lyonel Vincent\n© 2020 Emmanuel Gil Peyrot",
+ "version", getpackageversion(),
+ "license-type", GTK_LICENSE_GPL_2_0,
+ NULL);
-G_MODULE_EXPORT
-void
-on_version_realize (GtkWidget *widget,
-gpointer user_data)
-{
const char *latest = checkupdates();
- gtk_label_set_text(GTK_LABEL(widget), getpackageversion());
-
if(latest)
{
if(strcmp(latest, getpackageversion()) != 0)
@@ -100,18 +82,14 @@ gpointer user_data)
latest);
gtk_window_set_title(GTK_WINDOW(dialog), "Update available");
- /* Destroy the dialog when the user responds to it (e.g. clicks a button) */
- g_signal_connect_swapped (dialog, "response",
- G_CALLBACK (gtk_widget_destroy),
- dialog);
}
- gtk_widget_show(dialog);
+ gtk_dialog_run(GTK_DIALOG(dialog));
+ gtk_widget_destroy(dialog);
}
}
}
-
G_MODULE_EXPORT
void
on_treeview1_row_activated (GtkTreeView *treeview,
diff --git a/src/gui/callbacks.h b/src/gui/callbacks.h
index b9b9141c0eb7..e7636efdcae5 100644
--- a/src/gui/callbacks.h
+++ b/src/gui/callbacks.h
@@ -25,10 +25,6 @@ on_quit_activated (GSimpleAction *action,
GVariant *parameter,
gpointer app);
-void on_aboutclose_activate (GtkButton * button, gpointer user_data);
-
-void on_version_realize (GtkWidget * widget, gpointer user_data);
-
void
on_treeview1_row_activated (GtkTreeView * treeview,
GtkTreePath * path,
diff --git a/src/gui/gtk-lshw.ui b/src/gui/gtk-lshw.ui
index b61bedf501ee..57817fd58b39 100644
--- a/src/gui/gtk-lshw.ui
+++ b/src/gui/gtk-lshw.ui
@@ -1,107 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<requires lib="gtk+" version="3.22"/>
- <object class="GtkDialog" id="aboutlshw">
- <property name="can_focus">False</property>
- <property name="title" translatable="yes">About</property>
- <property name="resizable">False</property>
- <property name="window_position">center-on-parent</property>
- <property name="destroy_with_parent">True</property>
- <property name="type_hint">dialog</property>
- <property name="skip_taskbar_hint">True</property>
- <property name="skip_pager_hint">True</property>
- <child internal-child="vbox">
- <object class="GtkBox" id="dialog-vbox1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="orientation">vertical</property>
- <child internal-child="action_area">
- <object class="GtkButtonBox" id="dialog-action_area1">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="layout_style">end</property>
- <child>
- <object class="GtkButton" id="closebutton1">
- <property name="label">gtk-close</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="can_default">True</property>
- <property name="receives_default">False</property>
- <property name="use_stock">True</property>
- <signal name="activate" handler="on_aboutclose_activate" swapped="no"/>
- <signal name="clicked" handler="on_aboutclose_activate" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">0</property>
- </packing>
- </child>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="pack_type">end</property>
- <property name="position">0</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="aboutext">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="xpad">20</property>
- <property name="ypad">20</property>
- <property name="label" translatable="yes">&lt;big&gt;&lt;b&gt;GTK+ front-end for &lt;tt&gt;lshw&lt;/tt&gt;&lt;/b&gt;&lt;/big&gt;
-
-© 2004-2011 Lyonel Vincent
-&lt;tt&gt;lyonel@ezix.org&lt;/tt&gt;</property>
- <property name="use_markup">True</property>
- <property name="justify">center</property>
- <property name="mnemonic_widget">closebutton1</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">1</property>
- </packing>
- </child>
- <child>
- <object class="GtkLinkButton" id="linkbutton1">
- <property name="label" translatable="yes">http://www.ezix.org/</property>
- <property name="visible">True</property>
- <property name="can_focus">True</property>
- <property name="receives_default">True</property>
- <property name="has_tooltip">True</property>
- <property name="relief">none</property>
- <property name="uri">http://www.ezix.org/</property>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">True</property>
- <property name="position">2</property>
- </packing>
- </child>
- <child>
- <object class="GtkLabel" id="version">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="label" translatable="yes">VERSION</property>
- <property name="justify">center</property>
- <property name="mnemonic_widget">closebutton1</property>
- <signal name="realize" handler="on_version_realize" swapped="no"/>
- </object>
- <packing>
- <property name="expand">False</property>
- <property name="fill">False</property>
- <property name="position">3</property>
- </packing>
- </child>
- </object>
- </child>
- <action-widgets>
- <action-widget response="-7">closebutton1</action-widget>
- </action-widgets>
- </object>
<object class="GtkApplicationWindow" id="mainwindow">
<property name="can_focus">False</property>
<property name="title" translatable="yes">lshw</property>
diff --git a/src/gui/stock.c b/src/gui/stock.c
index 7b98c642d43f..db2e98189662 100644
--- a/src/gui/stock.c
+++ b/src/gui/stock.c
@@ -9,7 +9,6 @@ static char *id = "@(#) $Id$";
#define UIFILE "gtk-lshw.ui"
GtkWidget *mainwindow = NULL;
-GtkWidget *about = NULL;
GtkWidget *list1 = NULL;
GtkWidget *list2 = NULL;
GtkWidget *list3 = NULL;
@@ -146,7 +145,6 @@ void lshw_ui_init(GtkApplication *app)
g_free(uiname);
mainwindow = GTK_WIDGET( gtk_builder_get_object( builder, "mainwindow" ) );
- about = GTK_WIDGET( gtk_builder_get_object( builder, "aboutlshw" ) );
list1 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview1"));
list2 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview2"));
list3 = GTK_WIDGET(gtk_builder_get_object( builder, "treeview3"));
--
2.17.1

View File

@ -0,0 +1,22 @@
From 60c906d385b933fb6f5f0f2b14bfc9ea6de43a99 Mon Sep 17 00:00:00 2001
From: Lyonel Vincent <lyonel@ezix.org>
Date: Fri, 21 Aug 2020 11:38:20 +0200
Subject: [PATCH 15/18] Update 'docs/TODO'
---
docs/TODO | 2 ++
1 file changed, 2 insertions(+)
diff --git a/docs/TODO b/docs/TODO
index 1e74710cb37b..ff0f288e2333 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -7,3 +7,5 @@
* use businfo to find CPUs instead of hardcoding cpu:n form
* use sysfs for PCMCIA access
* use MPTABLE for reporting of CPUs
+
+report SSD/rotational devices: /sys/block/DEV/queue/rotational
--
2.17.1

View File

@ -0,0 +1,22 @@
From 358e65f92dec01f13b632d1d13fb8c76e1d50ca4 Mon Sep 17 00:00:00 2001
From: Lyonel Vincent <lyonel@ezix.org>
Date: Wed, 26 Aug 2020 23:36:59 +0200
Subject: [PATCH 16/18] Update 'docs/TODO'
---
docs/TODO | 1 +
1 file changed, 1 insertion(+)
diff --git a/docs/TODO b/docs/TODO
index ff0f288e2333..0b337826dc86 100644
--- a/docs/TODO
+++ b/docs/TODO
@@ -9,3 +9,4 @@
* use MPTABLE for reporting of CPUs
report SSD/rotational devices: /sys/block/DEV/queue/rotational
+better handle containers
\ No newline at end of file
--
2.17.1

View File

@ -0,0 +1,77 @@
From 2c235e6bf21e30b8e2da4d20f358df1e540a5b69 Mon Sep 17 00:00:00 2001
From: Lyonel Vincent <lyonel@ezix.org>
Date: Thu, 15 Oct 2020 14:11:58 +0200
Subject: [PATCH 17/18] update man page
add `-notime` option
---
src/lshw.1 | 9 ++++++---
src/lshw.sgml | 5 +++++
2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/src/lshw.1 b/src/lshw.1
index 79c36197c32d..ae6fa34cea50 100644
--- a/src/lshw.1
+++ b/src/lshw.1
@@ -1,5 +1,5 @@
.\" auto-generated by docbook2man-spec from docbook-utils package
-.TH "LSHW" "1" "28 January 2018" "$Rev$" ""
+.TH "LSHW" "1" "15 October 2020" "$Rev$" ""
.SH NAME
lshw \- list hardware
.SH SYNOPSIS
@@ -10,7 +10,7 @@ lshw \- list hardware
.sp
\fBlshw\fR [ \fB-X\fR ]
.sp
-\fBlshw\fR [ \fB [ -html ] [ -short ] [ -xml ] [ -json ] [ -businfo ] \fR ] [ \fB-dump \fIfilename\fB\fR ] [ \fB-class \fIclass\fB\fR\fI...\fR ] [ \fB-disable \fItest\fB\fR\fI...\fR ] [ \fB-enable \fItest\fB\fR\fI...\fR ] [ \fB-sanitize\fR ] [ \fB-numeric\fR ] [ \fB-quiet\fR ]
+\fBlshw\fR [ \fB [ -html ] [ -short ] [ -xml ] [ -json ] [ -businfo ] \fR ] [ \fB-dump \fIfilename\fB\fR ] [ \fB-class \fIclass\fB\fR\fI...\fR ] [ \fB-disable \fItest\fB\fR\fI...\fR ] [ \fB-enable \fItest\fB\fR\fI...\fR ] [ \fB-sanitize\fR ] [ \fB-numeric\fR ] [ \fB-quiet\fR ] [ \fB-notime\fR ]
.SH "DESCRIPTION"
.PP
@@ -53,7 +53,7 @@ Outputs the device tree showing hardware paths, very much like the output of HP-
Outputs the device list showing bus information, detailing SCSI, USB, IDE and PCI addresses.
.TP
\fB-dump \fIfilename\fB\fR
-Display output and dump collected information into a file (SQLite database).
+Dump collected information into a file (SQLite database).
.TP
\fB-class \fIclass\fB\fR
Only show the given class of hardware. \fIclass\fR can be found using \fBlshw -short\fR or \fBlshw -businfo\fR\&.
@@ -74,6 +74,9 @@ Remove potentially sensitive information from output (IP addresses, serial numbe
.TP
\fB-numeric\fR
Also display numeric IDs (for PCI and USB devices).
+.TP
+\fB-notime\fR
+Exclude volatile attributes (timestamps) from output.
.SH "BUGS"
.PP
\fBlshw\fR currently does not detect
diff --git a/src/lshw.sgml b/src/lshw.sgml
index 8c1c49e0898b..5e92cbfd4665 100644
--- a/src/lshw.sgml
+++ b/src/lshw.sgml
@@ -43,6 +43,7 @@ list hardware
<arg choice="opt"><option>-sanitize</option></arg>
<arg choice="opt"><option>-numeric</option></arg>
<arg choice="opt"><option>-quiet</option></arg>
+ <arg choice="opt"><option>-notime</option></arg>
</cmdsynopsis>
</refsynopsisdiv>
@@ -126,6 +127,10 @@ Remove potentially sensitive information from output (IP addresses, serial numbe
<listitem><para>
Also display numeric IDs (for PCI and USB devices).
</para></listitem></varlistentry>
+<varlistentry><term>-notime</term>
+<listitem><para>
+Exclude volatile attributes (timestamps) from output.
+</para></listitem></varlistentry>
</variablelist>
</para>
--
2.17.1

View File

@ -0,0 +1,41 @@
From 56f1de9d1e4d6ff92d98530c0d3d91b353a311b9 Mon Sep 17 00:00:00 2001
From: Lyonel Vincent <lyonel@ezix.org>
Date: Thu, 15 Oct 2020 14:22:05 +0200
Subject: [PATCH 18/18] fix man page after previous update
SGML source was not in sync with man page
---
src/lshw.1 | 2 +-
src/lshw.sgml | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/lshw.1 b/src/lshw.1
index ae6fa34cea50..74b0e42afcad 100644
--- a/src/lshw.1
+++ b/src/lshw.1
@@ -53,7 +53,7 @@ Outputs the device tree showing hardware paths, very much like the output of HP-
Outputs the device list showing bus information, detailing SCSI, USB, IDE and PCI addresses.
.TP
\fB-dump \fIfilename\fB\fR
-Dump collected information into a file (SQLite database).
+Display output and dump collected information into a file (SQLite database).
.TP
\fB-class \fIclass\fB\fR
Only show the given class of hardware. \fIclass\fR can be found using \fBlshw -short\fR or \fBlshw -businfo\fR\&.
diff --git a/src/lshw.sgml b/src/lshw.sgml
index 5e92cbfd4665..d190279e96d5 100644
--- a/src/lshw.sgml
+++ b/src/lshw.sgml
@@ -101,7 +101,7 @@ Outputs the device list showing bus information, detailing <productname>SCSI</pr
</para></listitem></varlistentry>
<varlistentry><term>-dump <replaceable class="parameter">filename</replaceable></term>
<listitem><para>
-Dump collected information into a file (SQLite database).
+Display output and dump collected information into a file (SQLite database).
</para></listitem></varlistentry>
<varlistentry><term>-class <replaceable class="parameter">class</replaceable></term>
<listitem><para>
--
2.17.1

View File

@ -0,0 +1,263 @@
From 9093e083aa78aee6b85345e8fd15424549d01cac Mon Sep 17 00:00:00 2001
From: Lianbo Jiang <lijiang@redhat.com>
Date: Thu, 3 Dec 2020 10:58:33 +0800
Subject: [PATCH] cleanup: remove unused support.c/support.h generated by Glade
The support.c and support.h are automatically generated by Glade, and these
files are not used any more, so let's remove the redundant files and make a
cleanup, which can also make ninja-build happy.
Signed-off-by: Lianbo Jiang <lijiang@redhat.com>
---
src/gui/callbacks.c | 1 -
src/gui/engine.cc | 5 --
src/gui/gtk-lshw.c | 1 -
src/gui/support.c | 144 --------------------------------------------
src/gui/support.h | 44 --------------
5 files changed, 195 deletions(-)
delete mode 100644 src/gui/support.c
delete mode 100644 src/gui/support.h
diff --git a/src/gui/callbacks.c b/src/gui/callbacks.c
index b108777fe11f..6b88c82e6098 100644
--- a/src/gui/callbacks.c
+++ b/src/gui/callbacks.c
@@ -5,7 +5,6 @@
#include <gtk/gtk.h>
#include "callbacks.h"
-#include "support.h"
#include "version.h"
#include "engine.h"
#include <string.h>
diff --git a/src/gui/engine.cc b/src/gui/engine.cc
index 2962ec80d81a..b537ef11db23 100644
--- a/src/gui/engine.cc
+++ b/src/gui/engine.cc
@@ -15,11 +15,6 @@
static const char *id = "@(#) $Id$";
-extern "C"
-{
-#include "support.h"
-};
-
#define AUTOMATIC "automatic file format"
#define LSHW_XML "lshw XML format (.lshw, .xml)"
#define PLAIN_TEXT "plain text document (.text, .txt)"
diff --git a/src/gui/gtk-lshw.c b/src/gui/gtk-lshw.c
index d3e531c4ceb3..090484317c6e 100644
--- a/src/gui/gtk-lshw.c
+++ b/src/gui/gtk-lshw.c
@@ -2,7 +2,6 @@
#include <unistd.h>
#include <gtk/gtk.h>
-#include "support.h"
#include "config.h"
#include "stock.h"
#include "engine.h"
diff --git a/src/gui/support.c b/src/gui/support.c
deleted file mode 100644
index 7dc3c78cb605..000000000000
--- a/src/gui/support.c
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <string.h>
-#include <stdio.h>
-
-#include <gtk/gtk.h>
-
-#include "support.h"
-
-GtkWidget*
-lookup_widget (GtkWidget *widget,
- const gchar *widget_name)
-{
- GtkWidget *parent, *found_widget;
-
- for (;;)
- {
- if (GTK_IS_MENU (widget))
- parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
- else
- parent = widget->parent;
- if (!parent)
- parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
- if (parent == NULL)
- break;
- widget = parent;
- }
-
- found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
- widget_name);
- if (!found_widget)
- g_warning ("Widget not found: %s", widget_name);
- return found_widget;
-}
-
-static GList *pixmaps_directories = NULL;
-
-/* Use this function to set the directory containing installed pixmaps. */
-void
-add_pixmap_directory (const gchar *directory)
-{
- pixmaps_directories = g_list_prepend (pixmaps_directories,
- g_strdup (directory));
-}
-
-/* This is an internally used function to find pixmap files. */
-static gchar*
-find_pixmap_file (const gchar *filename)
-{
- GList *elem;
-
- /* We step through each of the pixmaps directory to find it. */
- elem = pixmaps_directories;
- while (elem)
- {
- gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data,
- G_DIR_SEPARATOR_S, filename);
- if (g_file_test (pathname, G_FILE_TEST_EXISTS))
- return pathname;
- g_free (pathname);
- elem = elem->next;
- }
- return NULL;
-}
-
-/* This is an internally used function to create pixmaps. */
-GtkWidget*
-create_pixmap (GtkWidget *widget,
- const gchar *filename)
-{
- gchar *pathname = NULL;
- GtkWidget *pixmap;
-
- if (!filename || !filename[0])
- return gtk_image_new ();
-
- pathname = find_pixmap_file (filename);
-
- if (!pathname)
- {
- g_warning ("Couldn't find pixmap file: %s", filename);
- return gtk_image_new ();
- }
-
- pixmap = gtk_image_new_from_file (pathname);
- g_free (pathname);
- return pixmap;
-}
-
-/* This is an internally used function to create pixmaps. */
-GdkPixbuf*
-create_pixbuf (const gchar *filename)
-{
- gchar *pathname = NULL;
- GdkPixbuf *pixbuf;
- GError *error = NULL;
-
- if (!filename || !filename[0])
- return NULL;
-
- pathname = find_pixmap_file (filename);
-
- if (!pathname)
- {
- g_warning ("Couldn't find pixmap file: %s", filename);
- return NULL;
- }
-
- pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
- if (!pixbuf)
- {
- fprintf (stderr, "Failed to load pixbuf file: %s: %s\n",
- pathname, error->message);
- g_error_free (error);
- }
- g_free (pathname);
- return pixbuf;
-}
-
-/* This is used to set ATK action descriptions. */
-void
-glade_set_atk_action_description (AtkAction *action,
- const gchar *action_name,
- const gchar *description)
-{
- gint n_actions, i;
-
- n_actions = atk_action_get_n_actions (action);
- for (i = 0; i < n_actions; i++)
- {
- if (!strcmp (atk_action_get_name (action, i), action_name))
- atk_action_set_description (action, i, description);
- }
-}
-
diff --git a/src/gui/support.h b/src/gui/support.h
deleted file mode 100644
index 2dea079c2a42..000000000000
--- a/src/gui/support.h
+++ /dev/null
@@ -1,44 +0,0 @@
-/*
- * DO NOT EDIT THIS FILE - it is generated by Glade.
- */
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <gtk/gtk.h>
-
-/*
- * Public Functions.
- */
-
-/*
- * This function returns a widget in a component created by Glade.
- * Call it with the toplevel widget in the component (i.e. a window/dialog),
- * or alternatively any widget in the component, and the name of the widget
- * you want returned.
- */
-GtkWidget* lookup_widget (GtkWidget *widget,
- const gchar *widget_name);
-
-
-/* Use this function to set the directory containing installed pixmaps. */
-void add_pixmap_directory (const gchar *directory);
-
-
-/*
- * Private Functions.
- */
-
-/* This is used to create the pixmaps used in the interface. */
-GtkWidget* create_pixmap (GtkWidget *widget,
- const gchar *filename);
-
-/* This is used to create the pixbufs used in the interface. */
-GdkPixbuf* create_pixbuf (const gchar *filename);
-
-/* This is used to set ATK action descriptions. */
-void glade_set_atk_action_description (AtkAction *action,
- const gchar *action_name,
- const gchar *description);
-
--
2.17.1

View File

@ -1,7 +1,7 @@
Summary: Hardware lister
Name: lshw
Version: B.02.19.2
Release: 2%{?dist}
Release: 5%{?dist}
License: GPLv2
Group: Applications/System
URL: http://ezix.org/project/wiki/HardwareLiSter
@ -27,13 +27,34 @@ Patch18: 0014-devtree-Add-capabilites-to-the-OPAL-Firmware.patch
Patch19: 0015-fix-issue-with-logical-names-being-truncated-dev-sda.patch
Patch20: 0016-code-clean-up-for-read-3.patch
Patch21: 0017-report-product-model-on-Power-systems.patch
Patch22: 0001-Fix-few-memory-leaks.patch
Patch23: 0002-Build-against-gtk3-instead-of-gtk2.patch
Patch24: 0003-Remove-deprecated-stock-messages.patch
Patch25: 0004-Remove-hack-which-is-apparently-not-useful-anymore.patch
Patch26: 0005-Use-GtkFileChooserNative-instead-of-GtkFileChooserDi.patch
Patch27: 0006-Replace-deprecated-GtkIconFactory-with-GHashTable.patch
Patch28: 0007-Replace-the-last-GtkStock-in-overwrite-dialog.patch
Patch29: 0008-Remove-deprecated-widgets.patch
Patch30: 0009-Remove-deprecated-use_action_appearance-property.patch
Patch31: 0010-Move-to-GtkApplication.patch
Patch32: 0011-Replace-signals-with-GSimpleActions.patch
Patch33: 0012-Enable-Disable-GSimpleAction-instead-of-button-sensi.patch
Patch34: 0013-Move-from-GtkMenuBar-to-GMenu.patch
Patch35: 0014-Replace-the-about-GtkDialog-with-a-GtkAboutDialog.patch
Patch36: 0015-Update-docs-TODO.patch
Patch37: 0016-Update-docs-TODO.patch
Patch38: 0017-update-man-page.patch
Patch39: 0018-fix-man-page-after-previous-update.patch
Patch40: rhelonly-cleanup-remove-unused-support.c-support.h-generated-.patch
Patch41: 0001-Report-correct-memory-size-on-SMBIOS-2.7.patch
Patch42: 0001-devtree-Add-UUID-property.patch
BuildRequires: cmake
BuildRequires: desktop-file-utils
BuildRequires: gcc
BuildRequires: gcc-c++
BuildRequires: gettext
BuildRequires: gtk2-devel >= 2.4
BuildRequires: gtk3-devel >= 3.22
BuildRequires: libappstream-glib
BuildRequires: ninja-build
BuildRequires: python3-devel
@ -53,6 +74,7 @@ Information can be output in plain text, XML or HTML.
Summary: Graphical hardware lister
Group: Applications/System
Requires: polkit
Requires: gtk3 >= 3.22
Requires: %{name} = %{version}-%{release}
%description gui
Graphical frontend for the hardware lister (lshw) tool. If desired,
@ -82,6 +104,27 @@ format.
%patch19 -p1
%patch20 -p1
%patch21 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch26 -p1
%patch27 -p1
%patch28 -p1
%patch29 -p1
%patch30 -p1
%patch31 -p1
%patch32 -p1
%patch33 -p1
%patch34 -p1
%patch35 -p1
%patch36 -p1
%patch37 -p1
%patch38 -p1
%patch39 -p1
%patch40 -p1
%patch41 -p1
%patch42 -p1
%build
mkdir build && pushd build
@ -129,6 +172,18 @@ src/lshw -json \
%{_datadir}/polkit-1/actions/org.ezix.lshw.gui.policy
%changelog
* Tue Feb 02 2021 Lianbo Jiang <lijiang@redhat.com> - B.02.19.2-5
- Fix the wrong memory information in azure m or mv2 series
- Add UUID property to PowerVM LPAR
* Wed Dec 16 2020 Lianbo Jiang <lijiang@redhat.com> - B.02.19.2-4
- Fix the gtk3 dependency for lshw-gui instead of lshw
- Resolves: rhbz#1905816
* Thu Dec 03 2020 Lianbo Jiang <lijiang@redhat.com> - B.02.19.2-3
- Update to upstream master 56f1de9d1e4d
- Resolves: rhbz#1844426
* Wed May 27 2020 Lianbo Jiang <lijiang@redhat.com> - B.02.19.2-2
- Update to upstream master 3775782808e8