Precisa de ajuda com o aplicativo C ++ no Ubuntu GNOME 17.04

2

Observação: esse pode não ser o melhor lugar para essa pergunta, por isso, se houver um lugar melhor, entre em contato.

Existe um aplicativo maravilhoso chamado easystroke , que é um aplicativo de reconhecimento de gestos para o X11. No entanto, a última atualização de código foi em 2013 e tem alguns problemas no Ubuntu GNOME 17.04.

Ainda funciona no Ubuntu GNOME 17.04, mas tenho dois problemas.

  1. não se lembra de uma das suas preferências (método para mostrar gestos - XShape)
  2. compila com erros

O Wiki está localizado no link

O código pode ser facilmente obtido com git clone git://github.com/thjaeger/easystroke.git

Requisitos de criação e instruções de criação estão em link

Você compila com make -j2

Junto com alguns avisos de compilação, aqui está o erro de parada de exibição ...

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....

Algum pessoal C ++ por aí que possa ajudar?

    
por heynnema 07.07.2017 / 16:56

2 respostas

1

Como se constata, o patch no link sugerido por @ravery (obrigado) acabou sendo um patch para o freebsd ... no entanto, isso me fez pensar que poderia haver um patch em outro lugar que funcionaria no Ubuntu.

Acabei enviando e-mails com [email protected], e Tobias me forneceu um link em link que permitirá que o código Git compile (com muitos avisos) depois de aplicar o patch com 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 {
    
por heynnema 08.07.2017 / 22:16
1

O easystroke funciona bem no Arch (estou usando ele mesmo, dos repositórios). A versão lá é construída a partir da página original da sourceforge , e tem dois patches.

Este primeiro patch é para compilar com o gcc7

From 9e2c32390c5c253aade3bb703e51841748d2c37e Mon Sep 17 00:00:00 2001
From: Jonathan Wakely <[email protected]>
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;

Este segundo é para o problema que você mencionou

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 $<

O pacote AUR tem 4 patches, você pode conferir aqui . Você pode baixar os patches de lá e também clicar em View PKGBUILD para ver as instruções de construção (muito simples, aplique patches e faça). Aquele constrói a partir do git, mas para um projeto como este que é basicamente morto, -git não é muita diferença, eu acho. Há apenas um commit nos últimos 2 anos.

    
por Ng Oon-Ee 13.07.2017 / 11:27