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

 

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:

>