Нуждаюсь в помощи с приложением C++ на Ubuntu GNOME 17.04

Примечание: это не может быть лучшим местом для этого вопроса, поэтому если существует лучшее место, сообщите мне.

Существует замечательное названное приложение easystroke который является приложением для распознавания жеста для X11. Однако последнее обновление кода было в 2013, и оно имеет несколько проблем в Ubuntu GNOME 17.04.

Это все еще работает в Ubuntu GNOME 17.04, но у меня есть две проблемы.

  1. это не помнит одно из своих предпочтений (Метод для показа жестов - XShape)
  2. это компилирует с ошибками

Wiki расположена в https://github.com/thjaeger/easystroke/wiki

Код может быть легко получен с git clone git://github.com/thjaeger/easystroke.git

Требования сборки и инструкции по сборке в https://github.com/thjaeger/easystroke/wiki/BuildInstructions

Вы компилируете его с make -j2

Наряду с некоторыми предупреждениями компиляции, вот останавливающая шоу ошибка...

actions.cc: In constructor ‘TreeViewMulti::TreeViewMulti()’:
actions.cc:57:39: error: ‘group’ is not a member of ‘sigc’
  get_selection()->set_select_function(sigc::group(&negate, sigc::ref(pending)));
                                       ^~~~
Makefile:74: recipe for target 'actions.o' failed
make: *** [actions.o] Error 1
make: *** Waiting for unfinished jobs....

Какие-либо люди C++ там, которые могут предоставить руку?

3
задан 7 July 2017 в 17:56

2 ответа

Как оказалось, патч в https://reviews.freebsd.org/D10815 предложенный @ravery (спасибо) оказался патчем для freebsd... однако это действительно получало меня думающий, что мог бы быть патч в другом месте, который будет работать в Ubuntu.

Я закончил тем, что послал по электронной почте назад и вперед с tobias.kortkamp@gmail.com, и Tobias предоставил мне ссылку в https://aur.archlinux.org/cgit/aur.git/plain/sigc.patch? h=easystroke-git&id=3d16f0584c8cf0ade6c181cb56c12d7abe2e17b7 это позволит коду Мерзавца компилировать (с большим количеством предупреждений) после применения патча с patch -p1 -i /path/to/sigc.patch.

Fix build with libsigc++ 2.4+ (group was removed).
diff -Naur a/actions.cc b/actions.cc
--- a/actions.cc    2015-11-04 19:56:49.351107678 +0100
+++ b/actions.cc    2015-11-04 19:57:07.161246969 +0100
@@ -51,10 +51,8 @@
    context->set_icon(pb, pb->get_width(), pb->get_height());
 }

-bool negate(bool b) { return !b; }
-
 TreeViewMulti::TreeViewMulti() : Gtk::TreeView(), pending(false) {
-   get_selection()->set_select_function(sigc::group(&negate, sigc::ref(pending)));
+    get_selection()->set_select_function(sigc::mem_fun(*this, &TreeViewMulti::negate_pending));
 }

 enum Type { COMMAND, KEY, TEXT, SCROLL, IGNORE, BUTTON, MISC };
diff -Naur a/actions.h b/actions.h
--- a/actions.h 2015-11-04 19:56:49.351107678 +0100
+++ b/actions.h 2015-11-04 19:57:07.161246969 +0100
@@ -30,6 +30,11 @@
    virtual void on_drag_begin(const Glib::RefPtr<Gdk::DragContext> &context);
 public:
    TreeViewMulti();
+    bool negate_pending(const Glib::RefPtr<Gtk::TreeModel>& model,
+                        const Gtk::TreeModel::Path& path,
+                        bool path_currently_selected) {
+        return !pending;
+    }
 };

 class Actions {
2
ответ дан 1 December 2019 в 15:51

easystroke хорошо работает на Arch (я использую его сам от repos). Версия там создается из исходной страницы SourceForge и имеет два патча.

Этот первый патч для создания с gcc7

From 9e2c32390c5c253aade3bb703e51841748d2c37e Mon Sep 17 00:00:00 2001
From: Jonathan Wakely <jwakely@redhat.com>
Date: Sat, 28 Jan 2017 01:26:00 +0000
Subject: [PATCH] Remove abs(float) function that clashes with std::abs(float)

Depending on which C++ standard library headers have been included there
might an abs(float) function already declared in the global namespace,
so the definition in this file conflicts with it. This cause a build
failure with GCC 7, which conforms more closely to the C++ standard with
respect to overloads of abs.

Including <cmath> and adding a using-declaration for std::abs ensures
that the standard std::abs(float) function is available. This solution
should be portable to all compilers.
---
 handler.cc | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/handler.cc b/handler.cc
index 8830ea2..685b1ff 100644
--- a/handler.cc
+++ b/handler.cc
@@ -23,6 +23,8 @@
 #include <X11/extensions/XTest.h>
 #include <X11/XKBlib.h>
 #include <X11/Xproto.h>
+#include <cmath>  // std::abs(float)
+using std::abs;

 XState *xstate = nullptr;

@@ -533,8 +535,6 @@ class WaitForPongHandler : public Handler, protected Timeout {
    virtual Grabber::State grab_mode() { return parent->grab_mode(); }
 };

-static inline float abs(float x) { return x > 0 ? x : -x; }
-
 class AbstractScrollHandler : public Handler {
    bool have_x, have_y;
    float last_x, last_y;

Этот второй - для проблемы, которую Вы упомянули

diff -uprb easystroke-0.6.0.orig/actions.cc easystroke-0.6.0/actions.cc
--- easystroke-0.6.0.orig/actions.cc    2013-03-27 17:52:38.000000000 +0200
+++ easystroke-0.6.0/actions.cc 2015-12-07 22:07:17.720041171 +0200
@@ -51,10 +51,11 @@ void TreeViewMulti::on_drag_begin(const
    context->set_icon(pb, pb->get_width(), pb->get_height());
 }

-bool negate(bool b) { return !b; }
-
 TreeViewMulti::TreeViewMulti() : Gtk::TreeView(), pending(false) {
-   get_selection()->set_select_function(sigc::group(&negate, sigc::ref(pending)));
+   get_selection()->set_select_function(
+       [this](Glib::RefPtr<Gtk::TreeModel> const&, Gtk::TreeModel::Path const&, bool) {
+           return !pending;
+       });
 }

 enum Type { COMMAND, KEY, TEXT, SCROLL, IGNORE, BUTTON, MISC };
diff -uprb easystroke-0.6.0.orig/Makefile easystroke-0.6.0/Makefile
--- easystroke-0.6.0.orig/Makefile  2013-03-27 17:52:38.000000000 +0200
+++ easystroke-0.6.0/Makefile   2015-12-07 21:54:47.926776791 +0200
@@ -21,8 +21,7 @@ LOCALEDIR= $(PREFIX)/share/locale
 DFLAGS   =
 OFLAGS   = -O2
 AOFLAGS  = -O3
-STROKEFLAGS  = -Wall -std=c99 $(DFLAGS)
-CXXFLAGS = -Wall $(DFLAGS) -DLOCALEDIR=\"$(LOCALEDIR)\" `pkg-config gtkmm-3.0 dbus-glib-1 --cflags`
+CXXFLAGS = -Wall $(DFLAGS) -std=c++11 -DLOCALEDIR=\"$(LOCALEDIR)\" `pkg-config gtkmm-3.0 dbus-glib-1 --cflags`
 CFLAGS   = -Wall $(DFLAGS) -DLOCALEDIR=\"$(LOCALEDIR)\" `pkg-config gtk+-3.0 --cflags` -DGETTEXT_PACKAGE='"easystroke"'
 LDFLAGS  = $(DFLAGS)

@@ -63,7 +62,7 @@ $(BINARY): $(OFILES)
    $(CXX) $(LDFLAGS) -o $@ $(OFILES) $(LIBS)

 stroke.o: stroke.c
-   $(CC) $(STROKEFLAGS) $(AOFLAGS) -MT $@ -MMD -MP -MF $*.Po -o $@ -c $<
+   $(CC) $(CFLAGS) $(AOFLAGS) -MT $@ -MMD -MP -MF $*.Po -o $@ -c $<

 %.o: %.c
    $(CC) $(CFLAGS) $(OFLAGS) -MT $@ -MMD -MP -MF $*.Po -o $@ -c $<

Пакет АУРА имеет 4 патча, можно проверить его здесь. Можно загрузить патчи оттуда и также нажать View PKGBUILD, чтобы видеть инструкции по сборке (довольно простой действительно, применить патчи и затем сделать). Тот создает от мерзавца, но для проекта как это, которое в основном мертво, - мерзавец не является большой частью различия, я думаю. За прошлые 2 года существует только одна фиксация.

2
ответ дан 1 December 2019 в 15:51

Другие вопросы по тегам:

Похожие вопросы: