Browse Source
- Removal of all old code - Create the new directories tree - Move to cmake - Connection to daemondevs/jackdanielz/clouseau2
58 changed files with 1949 additions and 6434 deletions
@ -0,0 +1,18 @@
|
||||
cmake_minimum_required(VERSION 2.8.1) |
||||
|
||||
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_SOURCE_DIR}/cmake/Modules/") |
||||
|
||||
project(CLOUSEAU) |
||||
|
||||
find_package(Efl REQUIRED) |
||||
find_package(Eina REQUIRED) |
||||
find_package(Eet REQUIRED) |
||||
find_package(Efreet REQUIRED) |
||||
find_package(Eolian REQUIRED) |
||||
find_package(Eo REQUIRED) |
||||
find_package(Elementary REQUIRED) |
||||
find_package(Ecore REQUIRED) |
||||
find_package(Evas REQUIRED) |
||||
find_package(Edebug REQUIRED) |
||||
|
||||
add_subdirectory(src/bin) |
@ -1,25 +0,0 @@
|
||||
Copyright notice for Clouseau: |
||||
|
||||
Copyright (C) 2000-2011 Tom Hacohen and various contributors (see AUTHORS) |
||||
|
||||
All rights reserved. |
||||
|
||||
Redistribution and use in source and binary forms, with or without |
||||
modification, are permitted provided that the following conditions are met: |
||||
|
||||
1. Redistributions of source code must retain the above copyright |
||||
notice, this list of conditions and the following disclaimer. |
||||
2. Redistributions in binary form must reproduce the above copyright |
||||
notice, this list of conditions and the following disclaimer in the |
||||
documentation and/or other materials provided with the distribution. |
||||
|
||||
THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, |
||||
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND |
||||
FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE |
||||
COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, |
||||
OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF |
||||
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING |
||||
NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, |
||||
EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
@ -1 +0,0 @@
|
||||
The icons in this repository are herefore released into the Public Domain. |
@ -1,13 +0,0 @@
|
||||
|
||||
MAINTAINERCLEANFILES = Makefile.in aclocal.m4 config.guess \
|
||||
config.h.in config.sub configure install-sh \
|
||||
depcomp libtool missing
|
||||
|
||||
EXTRA_DIST = README AUTHORS COPYING autogen.sh
|
||||
|
||||
SUBDIRS = src data
|
||||
|
||||
ACLOCAL_AMFLAGS = -I m4
|
||||
|
||||
pkgconfigdir = $(libdir)/pkgconfig
|
||||
pkgconfig_DATA = clouseau.pc
|
@ -1,19 +0,0 @@
|
||||
An UI inspection tool for the EFL. This tool lets you inspect UI elements and get a lot of their properties, e.g position, size and weight. |
||||
|
||||
Clouseau consists of a client (clouseau_client) and launcher (clouseau_server). This design means we can: |
||||
1. Run the application we are debugging on one device and the clouseau_client itself on another. |
||||
2. Run the application we are debugging with a different environment/theme/etc compared to the clouseau client. |
||||
|
||||
Clouseau provides a wrapper script that automatically launches the application with clouseau support, and launches the client, the script is called "clouseau". |
||||
|
||||
Usage: |
||||
1. Using the wrapper script: |
||||
"clouseau elementary_test" or "clouseau elementary_test Entry". |
||||
2. Using the split client/server approach (different machines/environments/setups): |
||||
"clouseau_start elementary_test" and then "clouseau_client" |
||||
As mentioned above, this is done over the network, so it can be run from different machines |
||||
|
||||
Using the clouseau client: |
||||
When the client opens you'll be asked to enter the server's IP address. That's the IP address of where you ran clouseau_start from. When in doubt, just use the default, 127.0.0.1. |
||||
Then press "Ok" to connect to the server, and the rest should be fairly straightforward. |
||||
TBD |
@ -1,18 +0,0 @@
|
||||
* Make it possible to hide rects? or show only elm-widgets? or something similar? too much clutter atm. |
||||
* Add filter? |
||||
* Make it an elm module (or setting an env var without a module?) so I'll be able to remotely connect to elm apps. |
||||
* Split UI and actual program code (better to do the previous bullet first). |
||||
* Add "grab screenshot" button. |
||||
* Add a clipping range rectangle. |
||||
* Add special per object info, for example edje part names? |
||||
* When items are coloured, show the exact colour using a rect? |
||||
* Handle map/proxy |
||||
* add a way to filter object with some regexp on the name and also finding a specific object according to name. |
||||
* Add general info like hinting/whole interface scale/finger size and etc. |
||||
|
||||
* Things to show per-object |
||||
* clipping info. |
||||
* callback list? |
||||
|
||||
* Fix has_focus. |
||||
* Hook on feed events or something and let us see who gets what? |
@ -1,14 +0,0 @@
|
||||
#!/bin/sh |
||||
|
||||
rm -rf autom4te.cache |
||||
rm -f aclocal.m4 ltmain.sh |
||||
|
||||
echo "Running aclocal..." ; aclocal -I m4 $ACLOCAL_FLAGS || exit 1 |
||||
echo "Running autoheader..." ; autoheader || exit 1 |
||||
echo "Running autoconf..." ; autoconf || exit 1 |
||||
echo "Running libtoolize..." ; (libtoolize --copy --automake || glibtoolize --automake) || exit 1 |
||||
echo "Running automake..." ; automake --add-missing --copy --gnu || exit 1 |
||||
|
||||
if [ -z "$NOCONFIGURE" ]; then |
||||
./configure "$@" |
||||
fi |
@ -1,10 +0,0 @@
|
||||
prefix=@prefix@ |
||||
exec_prefix=@exec_prefix@ |
||||
libdir=@libdir@ |
||||
includedir=@includedir@ |
||||
|
||||
Name: clouseau |
||||
Description: Clouseau lib for elm debug |
||||
Version: @VERSION@ |
||||
Libs: -L${libdir} -llibclouseau |
||||
Cflags: -I${includedir}/clouseau-@VMAJ@ |
@ -0,0 +1,40 @@
|
||||
# - Try to find ffi |
||||
# Once done this will define |
||||
# FFI_FOUND - System has ffi |
||||
# FFI_INCLUDE_DIRS - The ffi include directories |
||||
# FFI_LIBRARIES - The libraries needed to use ffi |
||||
# FFI_LDFLAGS_OTHER - Other LDFLAGS needed te use ffi. |
||||
# FFI_DEFINITIONS - Compiler switches required for using ffi |
||||
|
||||
find_package(PkgConfig) |
||||
if ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_GREATER "2.8.1") |
||||
# "QUIET" was introduced in 2.8.2 |
||||
set(_QUIET QUIET) |
||||
endif () |
||||
pkg_check_modules(PC_LIBFFI ${_QUIET} libffi) |
||||
#set(FFI_DEFINITIONS ${PC_LIBFFI_CFLAGS_OTHER}) |
||||
#set(FFI_LDFLAGS_OTHER ${PC_LIBFFI_LDFLAGS_OTHER}) |
||||
|
||||
# before verison 2.8.11 variable CMAKE_LIBRARY_ARCHITECTURE wasn't automatically added to search path |
||||
if ("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}.${CMAKE_PATCH_VERSION}" VERSION_LESS "2.8.11") |
||||
set(FIND_PATH_HINTS ${PC_LIBFFI_INCLUDEDIR}/${CMAKE_LIBRARY_ARCHITECTURE}) |
||||
endif () |
||||
|
||||
find_path(FFI_INCLUDE_DIR ffi.h |
||||
HINTS ${PC_LIBFFI_INCLUDEDIR} ${PC_LIBFFI_INCLUDE_DIRS} |
||||
${FIND_PATH_HINTS} |
||||
) |
||||
|
||||
find_library(FFI_LIBRARY NAMES ffi libffi |
||||
HINTS ${PC_LIBFFI_LIBDIR} ${PC_LIBFFI_LIBRARY_DIRS}) |
||||
|
||||
set(FFI_INCLUDE_DIRS ${FFI_INCLUDE_DIR}) |
||||
set(FFI_LIBRARIES ${FFI_LIBRARY}) |
||||
|
||||
#include(FindPackageHandleStandardArgs) |
||||
# handle the QUIETLY and REQUIRED arguments and set EINA_FOUND to TRUE |
||||
# if all listed variables are TRUE |
||||
find_package_handle_standard_args(ffi DEFAULT_MSG |
||||
FFI_LIBRARY) |
||||
|
||||
mark_as_advanced(FFI_INCLUDE_DIRS FFI_LIBRARY) |
@ -1,120 +0,0 @@
|
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
m4_define([v_maj], [0]) |
||||
m4_define([v_min], [2]) |
||||
m4_define([v_mic], [0]) |
||||
m4_define([v_rev], m4_esyscmd([(git rev-list --count HEAD 2>/dev/null || echo 0) | tr -d '\n']))dnl |
||||
##-- When released, remove the dnl on the below line |
||||
dnl m4_undefine([v_rev]) |
||||
##-- When doing snapshots - change soname. remove dnl on below line |
||||
dnl m4_define([relname], [ver-pre-svn-07]) |
||||
dnl m4_define([v_rel], [-release relname]) |
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
m4_ifdef([v_rev], [m4_define([v_ver], [v_maj.v_min.v_mic.v_rev])], [m4_define([v_ver], [v_maj.v_min.v_mic])]) |
||||
m4_define([lt_cur], m4_eval(v_maj + v_min)) |
||||
m4_define([lt_rev], v_mic) |
||||
m4_define([lt_age], v_min) |
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
|
||||
AC_INIT(clouseau, [v_ver], tom@stosb.com) |
||||
AC_PREREQ(2.52) |
||||
AC_CONFIG_SRCDIR(configure.ac) |
||||
AC_CONFIG_MACRO_DIR([m4]) |
||||
AC_CANONICAL_BUILD |
||||
AC_CANONICAL_HOST |
||||
AC_CANONICAL_TARGET |
||||
|
||||
AM_INIT_AUTOMAKE(1.6 dist-bzip2) |
||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) |
||||
AC_CONFIG_HEADERS(config.h) |
||||
|
||||
AC_GNU_SOURCE |
||||
AC_PROG_LIBTOOL |
||||
|
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
m4_ifdef([v_rev], , [m4_define([v_rev], [0])]) |
||||
m4_ifdef([v_rel], , [m4_define([v_rel], [])]) |
||||
AC_DEFINE_UNQUOTED(VMAJ, [v_maj], [Major version]) |
||||
AC_DEFINE_UNQUOTED(VMIN, [v_min], [Minor version]) |
||||
AC_DEFINE_UNQUOTED(VMIC, [v_mic], [Micro version]) |
||||
AC_DEFINE_UNQUOTED(VREV, [v_rev], [Revison]) |
||||
version_info="lt_cur:lt_rev:lt_age" |
||||
release_info="v_rel" |
||||
AC_SUBST(version_info) |
||||
AC_SUBST(release_info) |
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--##--## |
||||
VMAJ=v_maj |
||||
AC_SUBST(VMAJ) |
||||
|
||||
PKG_CHECK_MODULES([EFL], |
||||
[ |
||||
eina >= 1.7.99 |
||||
eet >= 1.7.99 |
||||
elementary >= 1.7.99 |
||||
evas >= 1.7.99 |
||||
ecore >= 1.7.99 |
||||
ecore-ipc >= 1.7.99 |
||||
edje >= 1.7.99 |
||||
eo >= 1.7.99 |
||||
] |
||||
) |
||||
|
||||
want_systemd="yes" |
||||
EFL_ENABLE_BETA_API_SUPPORT |
||||
|
||||
AC_DEFINE([EFL_EO_API_SUPPORT], [1], [Enable access to unstable EFL EO API.]) |
||||
AC_ARG_ENABLE([systemd], |
||||
[AC_HELP_STRING([--disable-systemd], |
||||
[disable systemd integration. @<:@default=enabled@:>@])], |
||||
[ |
||||
if test "x${enableval}" = "xyes" ; then |
||||
want_systemd="yes" |
||||
else |
||||
want_systemd="no" |
||||
fi |
||||
]) |
||||
|
||||
if test "x${want_systemd}" = "xyes"; then |
||||
# Detect systemd user session directory properly |
||||
EFL_PKG_CHECK_VAR([USER_SESSION_DIR], [systemd], [systemduserunitdir], |
||||
[have_systemd_user_session="yes"], [have_systemd_user_session="no"]) |
||||
AC_SUBST([USER_SESSION_DIR]) |
||||
fi |
||||
AM_CONDITIONAL([HAVE_SYSTEMD_USER_SESSION], [test "x${have_systemd_user_session}" = "xyes"]) |
||||
|
||||
### Checks for linker characteristics |
||||
lt_enable_auto_import="" |
||||
case "${host_os}" in |
||||
mingw*) |
||||
lt_enable_auto_import="-Wl,--enable-auto-import" |
||||
;; |
||||
esac |
||||
case "$host_vendor" in |
||||
ps3*) |
||||
# Escape had already been checked to exist |
||||
;; |
||||
esac |
||||
AC_SUBST([lt_enable_auto_import]) |
||||
|
||||
EFL_ATTRIBUTE_UNUSED |
||||
|
||||
AC_CHECK_LIB(dl,dlopen) |
||||
AC_CHECK_FUNCS(dlopen dlerror) |
||||
|
||||
AC_CONFIG_FILES([ |
||||
clouseau.pc |
||||
Makefile |
||||
src/Makefile |
||||
src/lib/Makefile |
||||
src/bin/Makefile |
||||
src/scripts/Makefile |
||||
src/modules/Makefile |
||||
data/Makefile |
||||
data/images/Makefile |
||||
data/units/Makefile |
||||
]) |
||||
|
||||
AC_OUTPUT |
@ -1,2 +0,0 @@
|
||||
MAINTAINERCLEANFILES = Makefile.in
|
||||
SUBDIRS = images units
|
@ -1,12 +0,0 @@
|
||||
MAINTAINERCLEANFILES = Makefile.in
|
||||
|
||||
filesdir = $(datadir)/clouseau/images
|
||||
files_DATA = \
|
||||
clipper.png \
|
||||
hidden.png \
|
||||
background.png \
|
||||
screenshot-missing.png \
|
||||
show-screenshot.png \
|
||||
take-screenshot.png
|
||||
|
||||
EXTRA_DIST = $(files_DATA)
|
Before Width: | Height: | Size: 231 B |
Before Width: | Height: | Size: 2.0 KiB |
Before Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 1.9 KiB |
@ -1,11 +0,0 @@
|
||||
AUTOMAKE_OPTIONS = 1.4 foreign
|
||||
MAINTAINERCLEANFILES = Makefile.in
|
||||
|
||||
UNITS_FILES=clouseaud.service clouseaud.socket
|
||||
|
||||
if HAVE_SYSTEMD_USER_SESSION |
||||
unitsdir = $(USER_SESSION_DIR)
|
||||
units_DATA = $(UNITS_FILES)
|
||||
endif |
||||
|
||||
EXTRA_DIST = $(UNITS_FILES)
|
@ -1,10 +0,0 @@
|
||||
[Unit] |
||||
Description=Clouseau system service |
||||
Requires=xorg.target |
||||
After=xorg.target |
||||
|
||||
[Service] |
||||
ExecStart=/usr/bin/clouseaud |
||||
|
||||
[Install] |
||||
Also=clouseaud.socket |
@ -1,8 +0,0 @@
|
||||
[Unit] |
||||
Description=Clouseau Service Sockets |
||||
|
||||
[Socket] |
||||
ListenStream=22522 |
||||
|
||||
[Install] |
||||
WantedBy=sockets.target |
@ -1,56 +0,0 @@
|
||||
dnl Copyright (C) 2011 Vincent Torri <vtorri at univ-evry dot fr> |
||||
dnl That code is public domain and can be freely used or copied. |
||||
|
||||
dnl Macros for checking if the compiler supports some __attribute__ uses |
||||
|
||||
dnl Usage: EFL_ATTRIBUTE_UNUSED |
||||
dnl call AC_DEFINE for __UNUSED__ if __attribute__((unused)) is available |
||||
|
||||
AC_DEFUN([EFL_ATTRIBUTE_UNUSED], |
||||
[ |
||||
AC_MSG_CHECKING([for __attribute__ ((unused))]) |
||||
AC_COMPILE_IFELSE( |
||||
[AC_LANG_PROGRAM( |
||||
[[ |
||||
void foo(int x __attribute__ ((unused))) {} |
||||
]], |
||||
[[ |
||||
]])], |
||||
[have_attribute_unused="yes"], |
||||
[have_attribute_unused="no"]) |
||||
AC_MSG_RESULT([${have_attribute_unused}]) |
||||
|
||||
if test "x${have_attribute_unused}" = "xyes" ; then |
||||
AC_DEFINE([__UNUSED__], [__attribute__ ((unused))], [Macro declaring a function argument to be unused.]) |
||||
else |
||||
AC_DEFINE([__UNUSED__], [], [__attribute__ ((unused)) is not supported.]) |
||||
fi |
||||
]) |
||||
|
||||
dnl Usage: EFL_ATTRIBUTE_VECTOR |
||||
dnl call AC_DEFINE for HAVE_GCC_ATTRIBUTE_VECTOR if __attribute__((vector)) is available |
||||
|
||||
AC_DEFUN([EFL_ATTRIBUTE_VECTOR], |
||||
[ |
||||
AC_MSG_CHECKING([for __attribute__ ((vector))]) |
||||
AC_COMPILE_IFELSE( |
||||
[AC_LANG_PROGRAM( |
||||
[[ |
||||
typedef int v4si __attribute__ ((vector_size (16))); |
||||
]], |
||||
[[ |
||||
if (sizeof(v4si) == 16) |
||||
return 0; |
||||
else |
||||
return -1; |
||||
]])], |
||||
[have_attribute_vector="yes"], |
||||
[have_attribute_vector="no"]) |
||||
AC_MSG_RESULT([${have_attribute_vector}]) |
||||
|
||||
if test "x${have_attribute_vector}" = "xyes" ; then |
||||
AC_DEFINE([HAVE_GCC_ATTRIBUTE_VECTOR], [1], [Define to 1 if your compiler supports __attribute__ ((vector)).]) |
||||
fi |
||||
]) |
||||
|
||||
dnl End of efl_attribute.m4 |
@ -1,5 +0,0 @@
|
||||
dnl use: EFL_ENABLE_BETA_API_SUPPORT |
||||
AC_DEFUN([EFL_ENABLE_BETA_API_SUPPORT], |
||||
[ |
||||
AC_DEFINE([EFL_BETA_API_SUPPORT], [1], [Enable access to unstable EFL API that are still in beta]) |
||||
]) |
@ -1,14 +0,0 @@
|
||||
# PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, |
||||
# [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) |
||||
# ------------------------------------------- |
||||
# Retrieves the value of the pkg-config variable for the given module. |
||||
AC_DEFUN([EFL_PKG_CHECK_VAR], |
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl |
||||
AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl |
||||
|
||||
_PKG_CONFIG([$1], [variable="][$3]["], [$2]) |
||||
AS_VAR_COPY([$1], [pkg_cv_][$1]) |
||||
|
||||
AS_VAR_IF([$1], [""], [$5], [$4])dnl |
||||
])# PKG_CHECK_VAR |
||||
|
@ -1,4 +0,0 @@
|
||||
#!/bin/sh |
||||
gcc -Wall -Wextra -fPIC -rdynamic -g3 -O0 -c libclouseau.c `pkg-config --libs --cflags elementary ecore evas` |
||||
gcc -g3 -O0 -shared -Wl,-soname,libclouseau.so.1 -o libclouseau.so.1.0.1 libclouseau.o -lc -ldl `pkg-config --libs --cflags elementary` |
||||
|
@ -1,4 +0,0 @@
|
||||
|
||||
MAINTAINERCLEANFILES = Makefile.in
|
||||
|
||||
SUBDIRS = lib bin scripts modules
|
@ -0,0 +1,43 @@
|
||||
set(CMAKE_BUILD_TYPE Debug) |
||||
|
||||
LIST(APPEND SOURCES clouseau_client.c gui.c) |
||||
|
||||
STRING(REGEX REPLACE "\n" "" EOLIAN_EO_DIR ${EOLIAN_EO_DIR}) |
||||
STRING(REGEX REPLACE " " "" EOLIAN_EO_DIR ${EOLIAN_EO_DIR}) |
||||
add_definitions(${CLI_COMMON_DEFINITIONS} -DEFL_EO_API_SUPPORT |
||||
-DEOLIAN_EO_DIR="${EOLIAN_EO_DIR}" -DGUI_IMAGES_PATH="${CMAKE_HOME_DIRECTORY}/data/images") |
||||
|
||||
link_directories (${PC_LIBELEMENTARY_LIBRARY_DIRS}) |
||||
|
||||
include_directories( |
||||
${ELEMENTARY_INCLUDE_DIRS} |
||||
${EINA_INCLUDE_DIRS} |
||||
${EET_INCLUDE_DIRS} |
||||
${EFREET_INCLUDE_DIRS} |
||||
${EO_INCLUDE_DIRS} |
||||
${EOLIAN_INCLUDE_DIRS} |
||||
${ECORE_INCLUDE_DIRS} |
||||
${EVAS_INCLUDE_DIRS} |
||||
${EDEBUG_INCLUDE_DIRS} |
||||
) |
||||
|
||||
set(EOLIAN_INCLUDE_FLAG -I \"${EOLIAN_EO_DIR}/eo-1\" -I${CMAKE_CURRENT_SOURCE_DIR}) |
||||
|
||||
add_executable(clouseau_client ${SOURCES}) |
||||
|
||||
target_link_libraries(clouseau_client |
||||
pthread |
||||
${EFL_LIBRARIES} |
||||
${ELEMENTARY_LIBRARIES} |
||||
${EINA_LIBRARIES} |
||||
${EET_LIBRARIES} |
||||
${EFREET_LIBRARIES} |
||||
${EO_LIBRARIES} |
||||
${EOLIAN_LIBRARIES} |
||||
${ECORE_LIBRARIES} |
||||
${EVAS_LIBRARIES} |
||||
${EDEBUG_LIBRARIES} |
||||
ecore_file |
||||
) |
||||
|
||||
install(TARGETS clouseau_client DESTINATION bin) |
@ -1,21 +0,0 @@
|
||||
MAINTAINERCLEANFILES = Makefile.in
|
||||
|
||||
bin_PROGRAMS = clouseaud clouseau_client
|
||||
|
||||
clouseaud_SOURCES = clouseaud.c
|
||||
clouseau_client_SOURCES = \
|
||||
clouseau_client.c \
|
||||
client/cfg.c \
|
||||
client/config_dialog.c
|
||||
|
||||
AM_CPPFLAGS = \
|
||||
-I$(top_srcdir)/src/lib \ |
||||
-I$(top_srcdir)/src/include \ |
||||
-I$(top_builddir)/src/include \ |
||||
-DPACKAGE_BIN_DIR=\"$(bindir)\" \
|
||||
-DPACKAGE_LIB_DIR=\"$(libdir)\" \
|
||||
-DPACKAGE_DATA_DIR=\"$(datadir)/$(PACKAGE)\" \
|
||||
@EFL_CFLAGS@ |
||||
|
||||
clouseaud_LDADD = $(top_builddir)/src/lib/libclouseau.la @EFL_LIBS@
|
||||
clouseau_client_LDADD = $(top_builddir)/src/lib/libclouseau.la @EFL_LIBS@
|
@ -1,147 +0,0 @@
|
||||
#ifdef HAVE_CONFIG_H |
||||
# include "config.h" |
||||
#endif |
||||
|
||||
#include <Eet.h> |
||||
#include <Efreet.h> |
||||
|
||||
#include "cfg.h" |
||||
#include "Clouseau.h" |
||||
|
||||
Clouseau_Cfg *_clouseau_cfg = NULL; |
||||
static Eet_Data_Descriptor * _clouseau_cfg_descriptor; |
||||
#define _CONFIG_ENTRY "config" |
||||
|
||||
static char *config_file = NULL; |
||||
|
||||
static void |
||||
_clouseau_cfg_descriptor_init(void) |
||||
{ |
||||
Eet_Data_Descriptor_Class eddc; |
||||
|
||||
EET_EINA_STREAM_DATA_DESCRIPTOR_CLASS_SET(&eddc, Clouseau_Cfg); |
||||
_clouseau_cfg_descriptor = eet_data_descriptor_stream_new(&eddc); |
||||
|
||||
#define CFG_ADD_BASIC(member, eet_type)\ |
||||
EET_DATA_DESCRIPTOR_ADD_BASIC\
|
||||
(_clouseau_cfg_descriptor, Clouseau_Cfg, # member, member, eet_type) |
||||
|
||||
CFG_ADD_BASIC(version, EET_T_UINT); |
||||
CFG_ADD_BASIC(show_hidden, EET_T_UCHAR); |
||||
CFG_ADD_BASIC(show_clippers, EET_T_UCHAR); |
||||
CFG_ADD_BASIC(show_elm_only, EET_T_UCHAR); |
||||
|
||||
#undef CFG_ADD_BASIC |
||||
} |
||||
|
||||
static void |
||||
_clouseau_cfg_descriptor_shutdown(void) |
||||
{ |
||||
eet_data_descriptor_free(_clouseau_cfg_descriptor); |
||||
} |
||||
|
||||
void |
||||
clouseau_cfg_shutdown(void) |
||||
{ |
||||
if (config_file) |
||||
free(config_file); |
||||
|
||||
_clouseau_cfg_descriptor_shutdown(); |
||||
|
||||
eet_shutdown(); |
||||
efreet_shutdown(); |
||||
} |
||||
|
||||
void |
||||
clouseau_cfg_init(const char *file) |
||||
{ |
||||
const char *ext = ".cfg"; |
||||
const char *path; |
||||
size_t len; |
||||
|
||||
efreet_init(); |
||||
eet_init(); |
||||
|
||||
path = efreet_config_home_get(); |
||||
if (!path || !file) |
||||
return; |
||||
|
||||
if (config_file) |
||||
free(config_file); |
||||
|
||||
len = strlen(path) + strlen(file) + strlen(ext) + 1; /* +1 for '/' */ |
||||
|
||||
config_file = malloc(len + 1); |
||||
snprintf(config_file, len + 1, "%s/%s%s", path, file, ext); |
||||
|
||||
_clouseau_cfg_descriptor_init(); |
||||
} |
||||
|
||||
static Clouseau_Cfg * |
||||
_clouseau_cfg_new(void) |
||||
{ |
||||
Clouseau_Cfg *ret; |
||||
ret = calloc(1, sizeof(*ret)); |
||||
|
||||
ret->version = _CLOUSEAU_CFG_VERSION; |
||||
/* Default values */ |
||||
ret->show_elm_only = EINA_TRUE; |
||||
ret->show_clippers = EINA_TRUE; |
||||
ret->show_hidden = EINA_TRUE; |
||||
|
||||
return ret; |
||||
} |
||||
|
||||
/* Return false on error. */ |
||||
Eina_Bool |
||||
clouseau_cfg_load(void) |
||||
{ |
||||
Eet_File *ef; |
||||
|
||||
if (!config_file) |
||||
goto end; |
||||
|
||||
ef = eet_open(config_file, EET_FILE_MODE_READ); |
||||
if (!ef) |
||||
{ |
||||
/* FIXME Info message? create new config? */ |
||||
goto end; |
||||
} |
||||
|
||||
_clouseau_cfg = eet_data_read(ef, _clouseau_cfg_descriptor, _CONFIG_ENTRY); |
||||
|
||||
end: |
||||
if (!_clouseau_cfg) |
||||
{ |
||||
_clouseau_cfg = _clouseau_cfg_new(); |
||||
} |
||||
|
||||
eet_close(ef); |
||||
return EINA_TRUE; |
||||
} |
||||
|
||||
/* Return false on error. */ |
||||
Eina_Bool |
||||
clouseau_cfg_save(void) |
||||
{ |
||||
Eet_File *ef; |
||||
Eina_Bool ret; |
||||
|
||||
if (!config_file) |
||||
return EINA_FALSE; |
||||
|
||||
|
||||
ef = eet_open(config_file, EET_FILE_MODE_WRITE); |
||||
if (!ef) |
||||
{ |
||||
EINA_LOG_ERR("could not open '%s' for writing.", config_file); |
||||
return EINA_FALSE; |
||||
} |
||||
|
||||
ret = eet_data_write |
||||
(ef, _clouseau_cfg_descriptor, _CONFIG_ENTRY, _clouseau_cfg, EINA_TRUE); |
||||
eet_close(ef); |
||||
|
||||
return ret; |
||||
} |
||||
|
@ -1,25 +0,0 @@
|
||||
#ifndef _CFG_H |
||||
#define _CFG_H |
||||
|
||||
#include <Elementary.h> |
||||
|
||||
#define _CLOUSEAU_CFG_VERSION 1 |
||||
|
||||
void clouseau_cfg_init(const char *file); |
||||
void clouseau_cfg_shutdown(void); |
||||
|
||||
Eina_Bool clouseau_cfg_save(void); |
||||
Eina_Bool clouseau_cfg_load(void); |
||||
|
||||
typedef struct |
||||
{ |
||||
unsigned int version; |
||||
|
||||
Eina_Bool show_hidden; |
||||
Eina_Bool show_clippers; |
||||
Eina_Bool show_elm_only; |
||||
} Clouseau_Cfg; |
||||
|
||||
extern Clouseau_Cfg *_clouseau_cfg; |
||||
|
||||
#endif |
@ -1,93 +0,0 @@
|
||||
#ifdef HAVE_CONFIG_H |
||||
# include "config.h" |
||||
#endif |
||||
|
||||
#include <Elementary.h> |
||||
|
||||
#include "Clouseau.h" |
||||
#include "client/cfg.h" |
||||
#include "client/config_dialog.h" |
||||
|
||||
static Clouseau_Config_Changed_Cb _conf_changed_cb = NULL; |
||||
static void *_conf_changed_cb_data = NULL; |
||||
|
||||
static Eina_Bool _cfg_changed; |
||||
|
||||
static void |
||||
_close_btn_clicked(void *data, Evas_Object *obj EINA_UNUSED, |
||||
void *event_info EINA_UNUSED) |
||||
{ |
||||
Evas_Object *popup = data; |
||||
|
||||
if (_cfg_changed) |
||||
_conf_changed_cb(_conf_changed_cb_data); |
||||
|
||||
_conf_changed_cb = NULL; |
||||
_conf_changed_cb_data = NULL; |
||||
|
||||
evas_object_del(popup); |
||||
} |
||||
|
||||
static void |
||||
_config_check_changed(void *data, Evas_Object *obj, |
||||
void *event_info EINA_UNUSED) |
||||
{ |
||||
Eina_Bool *setting = data; |
||||
*setting = elm_check_state_get(obj); |
||||
_cfg_changed = EINA_TRUE; |
||||
} |
||||
|
||||
void |
||||
clouseau_settings_dialog_open(Evas_Object *parent, Clouseau_Config_Changed_Cb callback, const void *callback_data) |
||||
{ |
||||
Evas_Object *popup, *bx, *check, *btn; |
||||
|
||||
_cfg_changed = EINA_FALSE; |
||||
_conf_changed_cb = callback; |
||||
_conf_changed_cb_data = (void *) callback_data; |
||||
|
||||
popup = elm_popup_add(parent); |
||||
elm_object_part_text_set(popup, "title,text", "Clouseau Settings"); |
||||
evas_object_show(popup); |
||||
|
||||
bx = elm_box_add(popup); |
||||
elm_object_content_set(popup, bx); |
||||
evas_object_show(bx); |
||||
|
||||
check = elm_check_add(bx); |
||||
elm_object_text_set(check, "Show Hidden"); |
||||
elm_check_state_set(check, _clouseau_cfg->show_hidden); |
||||
evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0); |
||||
evas_object_size_hint_align_set(check, 0.0, 0.5); |
||||
elm_box_pack_end(bx, check); |
||||
evas_object_show(check); |
||||
evas_object_smart_callback_add(check, "changed", |
||||
_config_check_changed, &(_clouseau_cfg->show_hidden)); |
||||
|
||||
check = elm_check_add(bx); |
||||
elm_object_text_set(check, "Show Clippers"); |
||||
elm_check_state_set(check, _clouseau_cfg->show_clippers); |
||||
evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0); |
||||
evas_object_size_hint_align_set(check, 0.0, 0.5); |
||||
elm_box_pack_end(bx, check); |
||||
evas_object_show(check); |
||||
evas_object_smart_callback_add(check, "changed", |
||||
_config_check_changed, &(_clouseau_cfg->show_clippers)); |
||||
|
||||
check = elm_check_add(bx); |
||||
elm_object_text_set(check, "Only show Elementary widgets"); |
||||
elm_check_state_set(check, _clouseau_cfg->show_elm_only); |
||||
evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0.0); |
||||
evas_object_size_hint_align_set(check, 0.0, 0.5); |
||||
elm_box_pack_end(bx, check); |
||||
evas_object_show(check); |
||||
evas_object_smart_callback_add(check, "changed", |
||||
_config_check_changed, &(_clouseau_cfg->show_elm_only)); |
||||
|
||||
btn = elm_button_add(bx); |
||||
elm_object_text_set(btn, "Close"); |
||||
elm_object_part_content_set(popup, "button1", btn); |
||||
evas_object_show(btn); |
||||
evas_object_smart_callback_add(btn, "clicked", |
||||
_close_btn_clicked, popup); |
||||
} |
@ -1,8 +0,0 @@
|
||||
#ifndef _CONFIG_DIALOG_H |
||||
#define _CONFIG_DIALOG_H |
||||
|
||||
typedef void (*Clouseau_Config_Changed_Cb)(void *data); |
||||
void clouseau_settings_dialog_open(Evas_Object *parent, Clouseau_Config_Changed_Cb callback, const void *callback_data); |
||||
|
||||
#endif |
||||
|
@ -1,459 +0,0 @@
|
||||
#ifdef HAVE_CONFIG_H |
||||
# include "config.h" |
||||
#endif |
||||
|
||||
#include <fcntl.h> |
||||
#include <unistd.h> |
||||
#include <Ecore_Con_Eet.h> |
||||
|
||||
#include "Clouseau.h" |
||||
|
||||
#define LOCK_FILE "/tmp/clouseaud.pid" |
||||
|
||||
static Eina_List *gui = NULL; /* List of app_info_st for gui clients */ |
||||
static Eina_List *app = NULL; /* List of app_info_st for app clients */ |
||||
static Ecore_Con_Eet *eet_svr = NULL; |
||||
|
||||
static int _clouseaud_log_dom = -1; |
||||
|
||||
#ifdef CRITICAL |
||||
#undef CRITICAL |
||||
#endif |
||||
#define CRITICAL(...) EINA_LOG_DOM_CRIT(_clouseaud_log_dom, __VA_ARGS__) |
||||
|
||||
#ifdef ERR |
||||
#undef ERR |
||||
#endif |
||||
#define ERR(...) EINA_LOG_DOM_ERR(_clouseaud_log_dom, __VA_ARGS__) |
||||
|
||||
#ifdef WRN |
||||
#undef WRN |
||||
#endif |
||||
#define WRN(...) EINA_LOG_DOM_WARN(_clouseaud_log_dom, __VA_ARGS__) |
||||
|
||||
#ifdef INF |
||||
#undef INF |
||||
#endif |
||||
#define INF(...) EINA_LOG_DOM_INFO(_clouseaud_log_dom, __VA_ARGS__) |
||||
|
||||
#ifdef DBG |
||||
#undef DBG |
||||
#endif |
||||
#define DBG(...) EINA_LOG_DOM_DBG(_clouseaud_log_dom, __VA_ARGS__) |
||||
|
||||
|
||||
static void |
||||
_daemon_cleanup(void) |
||||
{ /* Free strings */ |
||||
app_info_st *p; |
||||
|
||||
DBG("Clients connected to this server when exiting: %d", |
||||
eina_list_count(app) + eina_list_count(gui)); |
||||
|
||||
EINA_LIST_FREE(gui, p) |
||||
{ |
||||
if(p->file) |
||||
free(p->file); |
||||
|
||||
if (p->ptr) |
||||
free((void *) (uintptr_t) p->ptr); |
||||
|
||||
free(p->name); |
||||
free(p); |
||||
} |
||||
|
||||
EINA_LIST_FREE(app, p) |
||||
{ |
||||
if(p->file) |
||||
free(p->file); |
||||
|
||||
if (p->ptr) |
||||
free((void *) (uintptr_t) p->ptr); |
||||
|
||||
free(p->name); |
||||
free(p); |
||||
} |
||||
|
||||
gui = app = NULL; |
||||
eet_svr = NULL; |
||||
} |
||||
|
||||
/* START - Ecore communication callbacks */ |
||||
static int |
||||
_client_ptr_cmp(const void *d1, const void *d2) |
||||
{ |
||||
return (((app_info_st *) d1)->ptr - ((unsigned long long) (uintptr_t) d2)); |
||||
} |
||||
|
||||
static Eina_List * |
||||
_add_client(Eina_List *clients, connect_st *t, void *client, const char *type) |
||||
{ |
||||
DBG("msg from <%p>", client); |
||||
|
||||
if(!eina_list_search_unsorted(clients, _client_ptr_cmp, client)) |
||||
{ |
||||
app_info_st *st = calloc(1, sizeof(app_info_st)); |
||||
st->name = strdup(t->name); |
||||
st->pid = t->pid; |
||||
st->ptr = (unsigned long long) (uintptr_t) client; |
||||
DBG("Added %s client <%p>", type, client); |
||||
return eina_list_append(clients, st); |
||||
} |
||||
|
||||
return clients; |
||||
} |
||||
|
||||
static Eina_List * |
||||
_remove_client(Eina_List *clients, void *client, const char *type) |
||||
{ |
||||
app_info_st *p = eina_list_search_unsorted(clients, _client_ptr_cmp, client); |
||||
DBG("Msg from <%p>", client); |
||||
|
||||
if (p) |
||||
{ |
||||
free(p->name); |
||||
free(p); |
||||
DBG("Removed %s client <%p>", type, client); |
||||
return eina_list_remove(clients, p); |
||||
} |
||||
|
||||
return clients; |
||||
} |
||||
|
||||
Eina_Bool |
||||
_add(EINA_UNUSED void *data, Ecore_Con_Reply *reply, |
||||
EINA_UNUSED Ecore_Con_Client *conn) |
||||
{ |
||||
/* TODO: ecore_ipc_client_data_size_max_set(ev->client, -1); */ |
||||
DBG("msg from <%p>", reply); |
||||
|
||||
return ECORE_CALLBACK_RENEW; |
||||
} |
||||
|
||||
Eina_Bool |
||||
_del(EINA_UNUSED void *data, Ecore_Con_Reply *reply, |
||||
EINA_UNUSED Ecore_Con_Client *conn) |
||||
{ |
||||
DBG("msg from <%p>", reply); |
||||
|
||||
/* Now we need to find if its an APP or GUI client */ |
||||
app_info_st *i = eina_list_search_unsorted(gui, _client_ptr_cmp, reply); |
||||
if (i) /* Only need to remove GUI client from list */ |
||||
gui = _remove_client(gui, reply, "GUI"); |
||||
|
||||
i = eina_list_search_unsorted(app, _client_ptr_cmp, reply); |
||||
if (i) |
||||
{ /* Notify all GUI clients to remove this APP */ |
||||
app_closed_st t = { (unsigned long long) (uintptr_t) reply }; |
||||
Eina_List *l; |
||||
EINA_LIST_FOREACH(gui, l, i) |
||||
{ |
||||
DBG("<%p> Sending APP_CLOSED to <%p>", reply, |
||||
(void *) (uintptr_t) i->ptr); |
||||
ecore_con_eet_send((void *) (uintptr_t) i->ptr, |
||||
CLOUSEAU_APP_CLOSED_STR, &t); |
||||
} |
||||
|
||||
app = _remove_client(app, reply, "APP"); |
||||
} |
||||
|
||||
if (!(gui || app)) |
||||
{ /* Trigger cleanup and exit when all clients disconneced */ |
||||
/* ecore_con_eet_server_free(eet_svr); why this causes Segfault? */ |
||||
ecore_con_server_del(data); |
||||
ecore_main_loop_quit(); |
||||
} |
||||
|
||||
return ECORE_CALLBACK_RENEW; |
||||
} |
||||
|
||||
void |
||||
_gui_client_connect_cb(EINA_UNUSED void *data, Ecore_Con_Reply *reply, |
||||
EINA_UNUSED const char *protocol_name, void *value) |
||||
{ /* Register GUI, then notify about all APP */ |
||||
app_info_st *st; |
||||
Eina_List *l; |
||||
connect_st *t = value; |
||||
DBG("msg from <%p>", reply); |
||||
|
||||
gui = _add_client(gui, t, reply, "GUI"); |
||||
|
||||
/* Add all registered apps to newly open GUI */ |
||||
EINA_LIST_FOREACH(app, l, st) |
||||
{ |
||||
DBG("<%p> Sending APP_ADD to <%p>", |
||||
(void *) (uintptr_t) st->ptr, reply); |
||||
|
||||
ecore_con_eet_send(reply, CLOUSEAU_APP_ADD_STR, st); |
||||
} |
||||
} |
||||
|
||||
void |
||||
_app_client_connect_cb(EINA_UNUSED void *data, Ecore_Con_Reply *reply, |
||||
EINA_UNUSED const char *protocol_name, void *value) |
||||
{ /* Register APP then notify GUI about it */ |
||||
app_info_st *st; |
||||
Eina_List *l; |
||||
connect_st *t = value; |
||||
app_info_st m = { t->pid, (char *) t->name, NULL, |
||||
(unsigned long long) (uintptr_t) reply, NULL, 0 }; |
||||
|
||||
DBG("msg from <%p>", reply); |
||||
|
||||
app = _add_client(app, t, reply, "APP"); |
||||
|
||||
/* Notify all GUI clients to add APP */ |
||||
EINA_LIST_FOREACH(gui, l, st) |
||||
{ |
||||
DBG("<%p> Sending APP_ADD to <%p>", |
||||
reply, (void *) (uintptr_t) st->ptr); |
||||
ecore_con_eet_send((void *) (uintptr_t) st->ptr, |
||||
CLOUSEAU_APP_ADD_STR, &m); |
||||
} |
||||
} |
||||
|
||||
void |
||||
_data_req_cb(EINA_UNUSED void *data, Ecore_Con_Reply *reply, |
||||
EINA_UNUSED const char *protocol_name, void *value) |
||||
{ /* msg coming from GUI, FWD this to APP specified in REQ */ |
||||
data_req_st *req = value; |
||||
DBG("msg from <%p>", reply); |
||||
|
||||
if (req->app) |
||||
{ /* Requesting specific app data */ |
||||
if(eina_list_search_unsorted(app, |
||||
_client_ptr_cmp, |
||||
(void *) (uintptr_t) req->app)) |
||||
{ /* Do the req only of APP connected to daemon */ |
||||
data_req_st t = { |
||||
(unsigned long long) (uintptr_t) reply, |
||||
(unsigned long long) (uintptr_t) req->app }; |
||||
|
||||
DBG("<%p> Sending DATA_REQ to <%p>", |
||||
reply, (void *) (uintptr_t) req->app); |
||||
ecore_con_eet_send((void *) (uintptr_t) req->app, |
||||
CLOUSEAU_DATA_REQ_STR, &t); |
||||
} |
||||
} |
||||
else |
||||
{ /* requesting ALL apps data */ |
||||
Eina_List *l; |
||||
app_info_st *st; |
||||
data_req_st t = { |
||||
(unsigned long long) (uintptr_t) reply, |
||||
(unsigned long long) (uintptr_t) NULL }; |
||||
|
||||
EINA_LIST_FOREACH(app, l, st) |
||||
{ |
||||
t.app = (unsigned long long) (uintptr_t) st->ptr; |
||||
DBG("<%p> Sending DATA_REQ to <%p>", |
||||
reply, (void *) (uintptr_t) st->ptr); |
||||
ecore_con_eet_send((void *) (uintptr_t) st->ptr, CLOUSEAU_DATA_REQ_STR, &t); |
||||
} |
||||
} |
||||
} |
||||
|
||||
void |
||||
_tree_data_cb(EINA_UNUSED void *data, EINA_UNUSED Ecore_Con_Reply *reply, |
||||
EINA_UNUSED const char *protocol_name, void *value) |
||||
{ /* Tree Data comes from APP, GUI client specified in msg */ |
||||
tree_data_st *td = value; |
||||
DBG("msg from <%p>", reply); |
||||
|
||||
if (td->gui) |
||||
{ /* Sending tree data to specific GUI client */ |
||||
if(eina_list_search_unsorted(gui, |
||||
_client_ptr_cmp, |
||||
(void *) (uintptr_t) td->gui)) |
||||
{ /* Do the req only of GUI connected to daemon */ |
||||
DBG("<%p> Sending TREE_DATA to <%p>", |
||||
reply, (void *) (uintptr_t) td->gui); |
||||
ecore_con_eet_send((void *) (uintptr_t) td->gui, |
||||
CLOUSEAU_TREE_DATA_STR, value); |
||||
} |
||||
} |
||||
else |
||||
{ /* Sending tree data to all GUI clients */ |
||||
Eina_List *l; |
||||
app_info_st *info; |
||||
EINA_LIST_FOREACH(gui, l, info) |
||||
{ |
||||
DBG("<%p> Sending TREE_DATA to <%p>", |
||||
reply, (void *) (uintptr_t) info->ptr); |
||||
ecore_con_eet_send((void *) (uintptr_t) info->ptr, |
||||
CLOUSEAU_TREE_DATA_STR, value); |
||||
} |
||||
} |
||||
|
||||
clouseau_data_tree_free(td->tree); |
||||
} |
||||
|
||||
void |
||||
_highlight_cb(EINA_UNUSED void *data, EINA_UNUSED Ecore_Con_Reply *reply, |
||||
EINA_UNUSED const char *protocol_name, void *value) |
||||
{ /* FWD this message to APP */ |
||||
highlight_st *ht = value; |
||||
DBG("msg from <%p>", reply); |
||||
|
||||
if(eina_list_search_unsorted(app, |
||||
_client_ptr_cmp, (void *) (uintptr_t) ht->app)) |
||||
{ /* Do the REQ only of APP connected to daemon */ |
||||
DBG("<%p> Sending HIGHLIGHT to <%p>", |
||||
reply, (void *) (uintptr_t) ht->app); |
||||
ecore_con_eet_send((void *) (uintptr_t) ht->app, |
||||
CLOUSEAU_HIGHLIGHT_STR, value); |
||||
} |
||||
} |
||||
|
||||
void |
||||
_bmp_req_cb(EINA_UNUSED void *data, Ecore_Con_Reply *reply, |
||||
EINA_UNUSED const char *protocol_name, void *value) |
||||
{ /* BMP data request coming from GUI to APP client */ |
||||
bmp_req_st *req = value; |
||||
DBG("msg from <%p>", reply); |
||||
|
||||
if(eina_list_search_unsorted(app, |
||||
_client_ptr_cmp, (void *) (uintptr_t) req->app)) |
||||
{ /* Do the req only if APP connected to daemon */ |
||||
bmp_req_st t = { |
||||
(unsigned long long) (uintptr_t) reply, |
||||
req->app, req->object, req->ctr }; |
||||
|
||||
DBG("<%p> Sending BMP_REQ to <%p>", |
||||
reply, (void *) (uintptr_t) req->app); |
||||
ecore_con_eet_send((void *) (uintptr_t) req->app, |
||||
CLOUSEAU_BMP_REQ_STR, &t); |
||||
} |
||||
} |
||||
|
||||
void |
||||
_bmp_data_cb(EINA_UNUSED void *data, EINA_UNUSED Ecore_Con_Reply *reply, |
||||
EINA_UNUSED const char *protocol_name, EINA_UNUSED const char *section, |
||||
void *value, EINA_UNUSED size_t length) |
||||
{ /* BMP Data comes from APP, GUI client specified in msg */ |
||||
bmp_info_st *st = clouseau_data_packet_info_get(protocol_name, |
||||
value, length); |
||||
|
||||
DBG("msg from <%p>", reply); |
||||
|
||||
if (st->gui) |
||||
{ /* Sending BMP data to specific GUI client */ |
||||
if(eina_list_search_unsorted(gui, |
||||
_client_ptr_cmp, |
||||
(void *) (uintptr_t) st->gui)) |
||||
{ /* Do the req only of GUI connected to daemon */ |
||||
DBG("<%p> Sending BMP_DATA to <%p>", |
||||
reply, (void *) (uintptr_t) st->gui); |
||||
ecore_con_eet_raw_send((void *) (uintptr_t) st->gui, |
||||
CLOUSEAU_BMP_DATA_STR, "BMP", value, length); |
||||
} |
||||
} |
||||
else |
||||
{ /* Sending BMP data to all GUI clients */ |
||||
Eina_List *l; |
||||
app_info_st *info; |
||||
EINA_LIST_FOREACH(gui, l, info) |
||||
{ |
||||
DBG("<%p> Sending BMP_DATA to <%p>", |
||||
reply, (void *) (uintptr_t) info->ptr); |
||||
ecore_con_eet_raw_send((void *) (uintptr_t) info->ptr, |
||||
CLOUSEAU_BMP_DATA_STR, "BMP", value, length); |
||||
} |
||||
} |
||||
|
||||
if (st->bmp) |
||||
free(st->bmp); |
||||
|
||||
free(st); |
||||
} |
||||
/* END - Ecore communication callbacks */ |
||||
|
||||
static void |
||||
_clouseaud_send_ready(void) |
||||
{ |
||||
printf("%s", CLOUSEAUD_READY_STR); |
||||
printf("\n"); |
||||
fflush(stdout); |
||||
} |
||||
|
||||
int main(void) |
||||
{ |
||||
int ret = 0; |
||||
/* Check single instance. */ |
||||
|
||||
{ |
||||
int pid_file = open(LOCK_FILE, O_CREAT | O_RDWR, 0666); |
||||
int rc = lockf(pid_file, F_TLOCK, 0); |
||||
if ((pid_file == -1) || rc) |
||||
{ |
||||
_clouseaud_send_ready(); |
||||
exit(0); |
||||
} |
||||
} |
||||
/* End of check single instance. */ |
||||
|
||||
eina_init(); |
||||
ecore_init(); |
||||
ecore_con_init(); |
||||
clouseau_data_init(); |
||||
Ecore_Con_Server *server = NULL; |
||||
const char *log_dom = "clouseaud"; |
||||
|
||||
|
||||
_clouseaud_log_dom = eina_log_domain_register(log_dom, EINA_COLOR_LIGHTBLUE); |
||||
if (_clouseaud_log_dom < 0) |
||||
{ |
||||
EINA_LOG_ERR("Could not register log domain: %s", log_dom); |
||||
ret = 3; |
||||
goto shutdown_and_exit; |
||||
} |
||||
|
||||
if (!(server = ecore_con_server_add(ECORE_CON_REMOTE_TCP | ECORE_CON_SOCKET_ACTIVATE, |
||||
LISTEN_IP, PORT, NULL))) |
||||
{ |
||||
ret = 1; |
||||
goto shutdown_and_exit; |
||||
} |
||||
|
||||
eet_svr = ecore_con_eet_server_new(server); |
||||
if (!eet_svr) |
||||
{ |
||||
ret = 2; |
||||
goto shutdown_and_exit; |
||||
} |
||||
|
||||
clouseau_register_descs(eet_svr); |
||||
|
||||
/* Register callbacks for ecore_con_eet */ |
||||
ecore_con_eet_client_connect_callback_add(eet_svr, _add, NULL); |
||||
ecore_con_eet_client_disconnect_callback_add(eet_svr, _del, server); |
||||
ecore_con_eet_data_callback_add(eet_svr, CLOUSEAU_GUI_CLIENT_CONNECT_STR, |
||||
_gui_client_connect_cb, NULL); |
||||
ecore_con_eet_data_callback_add(eet_svr, CLOUSEAU_APP_CLIENT_CONNECT_STR, |
||||
_app_client_connect_cb, NULL); |
||||
ecore_con_eet_data_callback_add(eet_svr, CLOUSEAU_DATA_REQ_STR, |
||||
_data_req_cb, NULL); |
||||
ecore_con_eet_data_callback_add(eet_svr, CLOUSEAU_TREE_DATA_STR, |
||||
_tree_data_cb, NULL); |
||||
ecore_con_eet_data_callback_add(eet_svr, CLOUSEAU_HIGHLIGHT_STR, |
||||
_highlight_cb, NULL); |
||||
ecore_con_eet_data_callback_add(eet_svr, CLOUSEAU_BMP_REQ_STR, |
||||
_bmp_req_cb, NULL); |
||||
ecore_con_eet_raw_data_callback_add(eet_svr, CLOUSEAU_BMP_DATA_STR, |
||||
_bmp_data_cb, NULL); |
||||
|
||||
/* Print to stdout which will be read by the monitoring app. */ |
||||
_clouseaud_send_ready(); |
||||
|
||||
ecore_main_loop_begin(); |
||||
|
||||
_daemon_cleanup(); |
||||
|
||||
shutdown_and_exit: |
||||
clouseau_data_shutdown(); |
||||
ecore_con_shutdown(); |
||||
ecore_shutdown(); |
||||
eina_shutdown(); |
||||
|
||||
return ret; |
||||
} |
@ -0,0 +1,595 @@
|
||||
{ |
||||
"JSON_Version":"1", |
||||
"Settings": |
||||
{ |
||||
"project":"gui", |
||||
"start_points":["main_win"] |
||||
}, |
||||
"Resources": |
||||
{ |
||||
"Images": |
||||
{ |
||||
"SCREENSHOT_ICON":"../../data/images/show-screenshot.png" |
||||
}, |
||||
"Eo_Callbacks": |
||||
{ |
||||
"profile_close":"_profile_win_close_cb", |
||||
"new_profile_save":"_new_profile_save_cb", |
||||
"new_profile_cancel":"_new_profile_cancel_cb", |
||||
"profile_del":"_profile_del_cb", |
||||
"screenshot_request":"screenshot_req_cb" |
||||
} |
||||
}, |
||||
"Widgets": |
||||
{ |
||||
"main_win": |
||||
{ |
||||
"Desc": |
||||
{ |
||||
"parent":null, |
||||
"class":"Elm.Win", |
||||
"public":true |
||||
}, |
||||
"Properties": |
||||
{ |
||||
"Elm.Win.type":["ELM_WIN_BASIC"], |
||||
"Elm.Widget.part_text":[null, "Window"], |
||||
"Elm.Win.autodel":[true], |
||||
"Evas.Object.size_hint_weight":[1, 1], |
||||
"Efl.Gfx.Base.visible":[true], |
||||
"Efl.Gfx.Base.size":[478, 484] |
||||
}, |
||||
"Contains":["elm_bg1", "elm_box1"] |
||||
}, |
||||
"elm_bg1": |
||||
{ |
||||
"Desc": |
||||
{ |
||||
"parent":"main_win", |
||||
"class":"Elm.Bg" |
||||
}, |
||||
"Properties": |
||||
{ |
||||
"Evas.Object.size_hint_weight":[1, 1], |
||||
"Efl.Gfx.Base.visible":[true], |
||||
"Efl.Gfx.Base.position":[0, 0] |
||||
} |
||||
}, |
||||
"elm_box1": |
||||
{ |
||||
"Desc": |
||||
{ |
||||
"parent":"main_win", |
||||
"class":"Elm.Box" |
||||
}, |
||||
"Properties": |
||||
{ |
||||
"Evas.Object.size_hint_weight":[1, 1], |
||||
"Efl.Gfx.Base.visible":[true], |
||||
"Efl.Gfx.Base.size":[643, 598], |
||||
"Efl.Gfx.Base.position":[-7, -2], |
||||
"Elm.Box.padding":[0, 0], |
||||
"Elm.Box.align":[0, 0] |
||||
}, |
||||
"Contains":["apps_selector", "elm_panes1"] |
||||
}, |
||||
"apps_selector": |
||||
{ |
||||
"Desc": |
||||
{ |
||||
"parent":"elm_box1", |
||||
"class":"Elm.Hoversel", |
||||
"public":true |
||||
}, |
||||
"Properties": |
||||
{ |
||||
"Evas.Object.size_hint_weight":[1, 0], |
||||
"Evas.Object.size_hint_align":[0.50, 0], |
||||
"Efl.Gfx.Base.visible":[true], |
||||
"Efl.Gfx.Base.size":[1174, 643], |
||||
"Efl.Gfx.Base.position":[-8, -2], |
||||
"Elm.Widget.part_text":[null, "Select App"] |
||||
} |
||||
}, |
||||
"elm_panes1": |
||||
{ |
||||
"Desc": |
||||
{ |
||||
"parent":"elm_box1", |
||||
"class":"Elm.Panes" |
||||
}, |
||||
"Properties": |
||||
{ |
||||
"Elm.Panes.content_right_size":[0.60], |
||||
"Evas.Object.size_hint_weight":[1, 1], |
||||
"Efl.Gfx.Base.size":[75, 75], |
||||
"Efl.Gfx.Base.visible":[true], |
||||
"Evas.Object.size_hint_weight":[1, 1], |
||||
"Evas.Object.size_hint_align":[-1, -1] |
||||
}, |
||||
"Contains": |
||||
{ |
||||
"objects_list":["left"], |
||||
"object_infos_list":["right"] |
||||
} |
||||
}, |
||||
"object_infos_list": |
||||