It works! Please consider my notes below and push it.
On Wednesday 09 of January 2013 16:31:35 Jiri Moskovcak wrote:
- now the logic is in the python code, so wizard doesn't have to
know
about whats behind the screencasting
---
src/gui-wizard-gtk/wizard.c | 49 +++++++++++++++++++++++++++++++++++++++------
src/plugins/abrt-screencast | 10 +++++++++
2 files changed, 53 insertions(+), 6 deletions(-)
diff --git a/src/gui-wizard-gtk/wizard.c b/src/gui-wizard-gtk/wizard.c
index d790f7d..52aff11 100644
--- a/src/gui-wizard-gtk/wizard.c
+++ b/src/gui-wizard-gtk/wizard.c
@@ -3075,6 +3075,30 @@ static void on_btn_startcast(GtkWidget *btn, gpointer user_data)
gtk_widget_show(GTK_WIDGET(g_wnd_assistant));
}
+bool is_screencast_available()
static bool is_screencast_available()
+{
+ const char *args[3];
+ args[0] = (char *) LIBEXEC_DIR"/abrt-screencast";
+ args[1] = "is-available";
+ args[2] = NULL;
+
+ pid_t castapp = 0;
+ castapp = fork_execv_on_steroids(
+ EXECFLG_QUIET,
+ (char **)args,
+ NULL,
+ /*env_vec:*/ NULL,
+ /*dir:*/ NULL,
+ /*uid (ignored):*/ 0
+ );
+
+ int status;
+ safe_waitpid(castapp, &status, 0);
+
+ /* 0 means that it's available */
+ return status == 0;
+}
+
void create_assistant(bool expert_mode)
{
g_loaded_texts = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, NULL);
@@ -3164,12 +3188,25 @@ void create_assistant(bool expert_mode)
g_signal_connect(g_btn_add_file, "clicked", G_CALLBACK(on_btn_add_file),
NULL);
- /* we need to override the activate-link handler, because we use
- * the link button instead of normal button and if wouldn't override it
- * gtk would try to run it's defualt action and open the associated URI
- * but since the URI is empty it would complain about it...
- */
- g_signal_connect(g_btn_startcast, "activate-link",
G_CALLBACK(on_btn_startcast), NULL);
+ if (is_screencast_available()) {
+ /* we need to override the activate-link handler, because we use
+ * the link button instead of normal button and if we wouldn't override it
+ * gtk would try to run it's defualt action and open the associated URI
+ * but since the URI is empty it would complain about it...
+ */
+ g_signal_connect(g_btn_startcast, "activate-link",
G_CALLBACK(on_btn_startcast), NULL);
FYI the button has the same look in both cases (available/unavailable) in KDE, the only
difference is that the button doesn't
change the look when you move mouse cursor over the button (unavailable case).
+ }
+ else {
+ gtk_widget_set_sensitive(GTK_WIDGET(g_btn_startcast), false);
+ gtk_widget_set_tooltip_markup(GTK_WIDGET(g_btn_startcast),
+ _("In order to enable the built-in screencasting "
+ "functionality the package recordmydesktop has to be installed. "
+ "Please run the following command if you want to install it."
+ "\n\n"
+ "<b>su -c \"yum install
recordmydesktop\"</b>"
+ ));
+ }
+
g_signal_connect(g_search_entry_bt, "changed", G_CALLBACK(search_timeout),
NULL);
diff --git a/src/plugins/abrt-screencast b/src/plugins/abrt-screencast
index 0511a65..bf3746a 100644
--- a/src/plugins/abrt-screencast
+++ b/src/plugins/abrt-screencast
@@ -235,9 +235,19 @@ class AbrtScreecastWindow(Gtk.Window):
# pylint: disable=E1101
self.present() #move it on top or do some magic to drag the attention
+def is_available():
+ for path in os.environ["PATH"].split(':'):
+ if os.path.exists(path+"/recordmydesktop"):
+ return True
few improvements taken over from
http://stackoverflow.com/questions/377017/test-if-executable-exists-in-py...
for path in os.environ["PATH"].split(os.pathsep):
path = path.strip('"')
fpath = os.path.join(path, "recordmydesktop")
if os.path.isfile(fpath) and os.access(fpath, os.X_OK):
return True
+
+ return False
if __name__ == "__main__":
output_file = None
+ if sys.argv[1] == "is-available":
+ exitcode = 0 if is_available() else 1
+ sys.exit(exitcode)
+
try:
output_file = sys.argv[1]
except IndexError, ex: