Split library from RapidLauncher
59
INSTALL.md
|
@ -1,59 +0,0 @@
|
|||
Installation Instructions
|
||||
=========================
|
||||
|
||||
GTK+ 3
|
||||
------
|
||||
|
||||
To install RapidLauncher you will need to have GTK+ 3 and its Vala
|
||||
bindings installed.
|
||||
|
||||
On Ubuntu (12.04) these packages are called:
|
||||
|
||||
* ``gir1.2-gtk-3.0``
|
||||
* ``libgtk-3-dev``
|
||||
|
||||
|
||||
|
||||
|
||||
Vala
|
||||
----
|
||||
|
||||
Since *RapidLauncher* is written in Vala you also need the Vala compiler
|
||||
(valac) and it's dependencies.
|
||||
|
||||
You will need at least version 0.16 to compile successfully, but the newer
|
||||
the better.
|
||||
|
||||
On Ubuntu (12.04) theses packages are called:
|
||||
|
||||
* ``valac-0.16``
|
||||
* ``valac-0.16-vapi``
|
||||
* ``libvala-0.16-0``
|
||||
|
||||
If you use Ubuntu you can add a Vala ppa to always get the lastest
|
||||
Vala compiler:
|
||||
|
||||
``ppa:vala-team/ppa``
|
||||
|
||||
|
||||
|
||||
Building
|
||||
---------------
|
||||
|
||||
When you have all dependencies installed simply run the install.sh script,
|
||||
which will interactively ask you for your requirements, set the environment
|
||||
variables accordingly and run *make*.
|
||||
|
||||
``$ make``
|
||||
``$ sudo make install``
|
||||
|
||||
|
||||
Usage
|
||||
-----
|
||||
|
||||
Once you have installed RapidLauncher you can start it with the
|
||||
'rapidlauncher' command or by using the included .desktop file.
|
||||
|
||||
You probably want to bind the ``rapidlauncher`` command to a keyboard
|
||||
shortcut.
|
||||
|
104
Makefile
|
@ -1,56 +1,98 @@
|
|||
SHARED_LIBRARY := libappman.so
|
||||
VAPI_FILE := appman.vapi
|
||||
HEADER_FILE := appman.h
|
||||
|
||||
RCKTL_INSTALL_LIB_DIR := /usr/lib/rapidlauncher
|
||||
BUILD_DIR := build
|
||||
DIR_SOURCES := src
|
||||
|
||||
BINARY_DIR := src/
|
||||
LIB_DIR := lib/
|
||||
MISC_DIR := misc
|
||||
PACKAGES := gobject-2.0
|
||||
PACKAGES += glib-2.0
|
||||
PACKAGES += gio-2.0
|
||||
PACKAGES += x11
|
||||
PACKAGES += gtk+-3.0
|
||||
|
||||
GEN_FLAGS := $(addprefix --pkg ,$(PACKAGES))
|
||||
GEN_FLAGS += --target-glib=2.32
|
||||
GEN_FLAGS += --ccode
|
||||
GEN_FLAGS += --header="$(BUILD_DIR)/$(HEADER_FILE)"
|
||||
GEN_FLAGS += --vapi="$(BUILD_DIR)/$(VAPI_FILE)"
|
||||
|
||||
CC_FLAGS := -w
|
||||
CC_FLAGS += -fPIC
|
||||
CC_FLAGS += -shared
|
||||
CC_FLAGS += $(shell pkg-config --cflags $(PACKAGES))
|
||||
|
||||
LD_FLAGS := -fPIC
|
||||
LD_FLAGS += -shared
|
||||
LD_FLAGS += $(shell pkg-config --libs $(PACKAGES))
|
||||
|
||||
SOURCES := $(wildcard $(DIR_SOURCES)/*.vala)
|
||||
|
||||
OBJECTS := ${SOURCES:.vala=.o}
|
||||
VAPIFILES := ${SOURCES:.vala=.vapi}
|
||||
|
||||
|
||||
export RCKTL_INSTALL_LIB_DIR=/usr/lib/rapidlauncher
|
||||
export RCKTL_INSTALL_BIN_DIR=/usr/bin
|
||||
export RCKTL_INSTALL_ICON_DIR=/usr/share/icons/hicolor
|
||||
export RCKTL_INSTALL_DESKTOPFILE_DIR=/usr/share/applications
|
||||
ifndef BUILD_DIR
|
||||
$(error variable BUILD_DIR is not set)
|
||||
endif
|
||||
|
||||
export RCKTL_DIR=../$(BUILD_DIR)
|
||||
ifndef RCKTL_INSTALL_LIB_DIR
|
||||
$(error variable RCKTL_INSTALL_LIB_DIR is not set)
|
||||
endif
|
||||
|
||||
export RCKTL_BUILD_DEBUG
|
||||
export RCKTL_BUILD_RELEASE
|
||||
export RCKTL_FEATURE_APPINDICATOR
|
||||
ifdef RCKTL_BUILD_DEBUG
|
||||
GEN_FLAGS += --debug
|
||||
CC_FLAGS += --debug
|
||||
endif
|
||||
|
||||
ifdef RCKTL_BUILD_RELEASE
|
||||
CC_FLAGS += -O3
|
||||
endif
|
||||
|
||||
|
||||
.SECONDARY:
|
||||
@#
|
||||
|
||||
.PHONY: all clean install uninstall
|
||||
@#
|
||||
|
||||
|
||||
all: .LIBRARY .BINARY .MISC
|
||||
all: $(SOURCES) $(CFILES) $(BUILD_DIR)/$(SHARED_LIBRARY) $(BUILD_DIR)/$(VAPI_FILE) $(BUILD_DIR)/$(HEADER_FILE)
|
||||
@#
|
||||
|
||||
clean:
|
||||
@$(MAKE) clean -C "$(BINARY_DIR)"
|
||||
@$(MAKE) clean -C "$(LIB_DIR)"
|
||||
@$(MAKE) clean -C "$(MISC_DIR)"
|
||||
rm -f ${SOURCES:.vala=.c}
|
||||
rm -f ${SOURCES:.vala=.h}
|
||||
rm -f ${SOURCES:.vala=.o}
|
||||
rm -f ${SOURCES:.vala=.vapi}
|
||||
rm -f "$(BUILD_DIR)/$(VAPI_FILE)"
|
||||
rm -f "$(BUILD_DIR)/$(HEADER_FILE)"
|
||||
rm -f "$(BUILD_DIR)/$(SHARED_LIBRARY)"
|
||||
|
||||
install:
|
||||
@$(MAKE) install -C "$(BINARY_DIR)"
|
||||
@$(MAKE) install -C "$(LIB_DIR)"
|
||||
@$(MAKE) install -C "$(MISC_DIR)"
|
||||
install -D "$(BUILD_DIR)/$(SHARED_LIBRARY)" "$(DESTDIR)$(RCKTL_INSTALL_LIB_DIR)/$(SHARED_LIBRARY)"
|
||||
|
||||
uninstall:
|
||||
@$(MAKE) uninstall -C "$(BINARY_DIR)"
|
||||
@$(MAKE) uninstall -C "$(LIB_DIR)"
|
||||
@$(MAKE) uninstall -C "$(MISC_DIR)"
|
||||
|
||||
-rmdir "$(DESTDIR)$(RCKTL_INSTALL_LIB_DIR)"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_LIB_DIR)/$(SHARED_LIBRARY)"
|
||||
|
||||
|
||||
$(BUILD_DIR):
|
||||
mkdir --parents "$(BUILD_DIR)"
|
||||
%.vapi: %.vala
|
||||
@echo " GEN $(notdir $@)"
|
||||
@valac --fast-vapi="$@" $<
|
||||
|
||||
.BINARY: $(BUILD_DIR) .LIBRARY
|
||||
@$(MAKE) -C "$(BINARY_DIR)"
|
||||
MISSINGVAPIFILES=$(subst $(subst .c,.vapi,$@),,$(VAPIFILES))
|
||||
$(BUILD_DIR)/$(HEADER_FILE):
|
||||
$(BUILD_DIR)/$(VAPI_FILE):
|
||||
%.c: $(MISSINGVAPIFILES) %.vala
|
||||
@echo " GEN $(notdir $@)"
|
||||
@valac $(GEN_FLAGS) $(addprefix --use-fast-vapi=,$(MISSINGVAPIFILES)) "$(subst .c,.vala,$@)"
|
||||
|
||||
.LIBRARY: $(BUILD_DIR)
|
||||
@$(MAKE) -C "$(LIB_DIR)"
|
||||
%.o: %.c
|
||||
@echo " CC $(notdir $@)"
|
||||
@$(CC) $(CC_FLAGS) -c $< -o $@
|
||||
|
||||
.MISC: $(BUILD_DIR)
|
||||
@$(MAKE) -C "$(MISC_DIR)"
|
||||
$(BUILD_DIR)/$(SHARED_LIBRARY): $(OBJECTS)
|
||||
@echo " LD $(notdir $@)"
|
||||
@$(CC) $(OBJECTS) $(LD_FLAGS) -o "$(BUILD_DIR)/$(SHARED_LIBRARY)"
|
||||
|
||||
|
|
22
README.md
|
@ -1,16 +1,9 @@
|
|||
Rapid Launcher
|
||||
Appman
|
||||
===============
|
||||
|
||||
Rapid Launcher is an application launcher that is supposed to be fast and
|
||||
relatively lightweight.
|
||||
|
||||
The backend is written in Vala and the frontend is written with C/GTK+ 3.
|
||||
|
||||
Rapid Launcher is born to give a good launcher also for old PCs. It's really simple and is inspired by the Android and OSX launchers.
|
||||
|
||||
|
||||
|
||||
![Screenshot](screenshot.jpg "Screenshot")
|
||||
Appman is a library (single-threaded) written in Vala to manage the applications installed on a Linux system. Infact, its name means Application Manager (Appman).
|
||||
You could use this library to write your application launchers.
|
||||
The library comes from Rocket-Launcher but I made some changes to make it better. Look at the [strcture] (https://github.com/echo-devim/RapidLauncher/blob/master/STRUCTURE.md).
|
||||
|
||||
### Version
|
||||
|
||||
|
@ -18,16 +11,15 @@ Rapid Launcher is born to give a good launcher also for old PCs. It's really sim
|
|||
|
||||
### Dependencies
|
||||
|
||||
Install gtk+ 3 devel to compile this software. For Fedora/RHEL/CentOS is `gtk3-devel` and for Ubuntu/Debian is `libgtk-3-dev`.
|
||||
Install *valac* (at least version 0.16) from your repository. You need also *glib-2.0*.
|
||||
|
||||
### Backend
|
||||
### Installation
|
||||
|
||||
The backend is a library (single-threaded) written in Vala from Rocket-Launcher. I made some changes to this library to make it better. You can use this library to manage the applications installed on your system and build new launchers. Look at the [strcture] (https://github.com/echo-devim/RapidLauncher/blob/master/STRUCTURE.md).
|
||||
Just run `make` and then `sudo make install` to install it.
|
||||
|
||||
### TODO
|
||||
|
||||
* Reduce memory usage
|
||||
* Align the matching applications of a search in the right way
|
||||
|
||||
|
||||
### License
|
||||
|
|
100
lib/Makefile
|
@ -1,100 +0,0 @@
|
|||
SHARED_LIBRARY := libappman.so
|
||||
VAPI_FILE := appman.vapi
|
||||
HEADER_FILE := appman.h
|
||||
|
||||
PACKAGES := gobject-2.0
|
||||
PACKAGES += glib-2.0
|
||||
PACKAGES += gio-2.0
|
||||
PACKAGES += x11
|
||||
PACKAGES += gtk+-3.0
|
||||
|
||||
GEN_FLAGS := $(addprefix --pkg ,$(PACKAGES))
|
||||
GEN_FLAGS += --target-glib=2.32
|
||||
GEN_FLAGS += --ccode
|
||||
GEN_FLAGS += --header="$(RCKTL_DIR)/$(HEADER_FILE)"
|
||||
GEN_FLAGS += --vapi="$(RCKTL_DIR)/$(VAPI_FILE)"
|
||||
|
||||
CC_FLAGS := -w
|
||||
CC_FLAGS += -fPIC
|
||||
CC_FLAGS += -shared
|
||||
CC_FLAGS += $(shell pkg-config --cflags $(PACKAGES))
|
||||
|
||||
LD_FLAGS := -fPIC
|
||||
LD_FLAGS += -shared
|
||||
LD_FLAGS += $(shell pkg-config --libs $(PACKAGES))
|
||||
|
||||
SOURCES := ApplicationHandler.vala
|
||||
SOURCES += App.vala
|
||||
SOURCES += Constants.vala
|
||||
SOURCES += IconDirectory.vala
|
||||
SOURCES += IconManager.vala
|
||||
SOURCES += IconTheme.vala
|
||||
SOURCES += Printer.vala
|
||||
|
||||
OBJECTS := ${SOURCES:.vala=.o}
|
||||
VAPIFILES := ${SOURCES:.vala=.vapi}
|
||||
|
||||
|
||||
ifndef RCKTL_DIR
|
||||
$(error variable RCKTL_DIR is not set)
|
||||
endif
|
||||
|
||||
ifndef RCKTL_INSTALL_LIB_DIR
|
||||
$(error variable RCKTL_INSTALL_LIB_DIR is not set)
|
||||
endif
|
||||
|
||||
ifdef RCKTL_BUILD_DEBUG
|
||||
GEN_FLAGS += --debug
|
||||
CC_FLAGS += --debug
|
||||
endif
|
||||
|
||||
ifdef RCKTL_BUILD_RELEASE
|
||||
CC_FLAGS += -O3
|
||||
endif
|
||||
|
||||
|
||||
.SECONDARY:
|
||||
@#
|
||||
|
||||
.PHONY: all clean install uninstall
|
||||
@#
|
||||
|
||||
|
||||
all: $(SOURCES) $(CFILES) $(RCKTL_DIR)/$(SHARED_LIBRARY) $(RCKTL_DIR)/$(VAPI_FILE) $(RCKTL_DIR)/$(HEADER_FILE)
|
||||
@#
|
||||
|
||||
clean:
|
||||
rm -f ${SOURCES:.vala=.c}
|
||||
rm -f ${SOURCES:.vala=.h}
|
||||
rm -f ${SOURCES:.vala=.o}
|
||||
rm -f ${SOURCES:.vala=.vapi}
|
||||
rm -f "$(RCKTL_DIR)/$(VAPI_FILE)"
|
||||
rm -f "$(RCKTL_DIR)/$(HEADER_FILE)"
|
||||
rm -f "$(RCKTL_DIR)/$(SHARED_LIBRARY)"
|
||||
|
||||
install:
|
||||
install -D "$(RCKTL_DIR)/$(SHARED_LIBRARY)" "$(DESTDIR)$(RCKTL_INSTALL_LIB_DIR)/$(SHARED_LIBRARY)"
|
||||
|
||||
uninstall:
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_LIB_DIR)/$(SHARED_LIBRARY)"
|
||||
|
||||
|
||||
%.vapi: %.vala
|
||||
@echo " GEN $(notdir $@)"
|
||||
@valac --fast-vapi="$@" $<
|
||||
|
||||
MISSINGVAPIFILES=$(subst $(subst .c,.vapi,$@),,$(VAPIFILES))
|
||||
$(RCKTL_DIR)/$(HEADER_FILE):
|
||||
$(RCKTL_DIR)/$(VAPI_FILE):
|
||||
%.c: $(MISSINGVAPIFILES) %.vala
|
||||
@echo " GEN $(notdir $@)"
|
||||
@valac $(GEN_FLAGS) $(addprefix --use-fast-vapi=,$(MISSINGVAPIFILES)) "$(subst .c,.vala,$@)"
|
||||
|
||||
%.o: %.c
|
||||
@echo " CC $(notdir $@)"
|
||||
@$(CC) $(CC_FLAGS) -c $<
|
||||
|
||||
$(RCKTL_DIR)/$(SHARED_LIBRARY): $(OBJECTS)
|
||||
@echo " LD $(notdir $@)"
|
||||
@$(CC) $(OBJECTS) $(LD_FLAGS) -o "$(RCKTL_DIR)/$(SHARED_LIBRARY)"
|
||||
|
|
@ -1,83 +0,0 @@
|
|||
PORTABLE_SCRIPT := run.sh
|
||||
RUN_SCRIPT := rapidlauncher
|
||||
DESKTOP_FILE := rapidlauncher.desktop
|
||||
ICON_NAME := rapidlauncher
|
||||
|
||||
|
||||
ifndef RCKTL_DIR
|
||||
$(error variable RCKTL_DIR is not set)
|
||||
endif
|
||||
|
||||
ifndef RCKTL_INSTALL_LIB_DIR
|
||||
$(error variable RCKTL_INSTALL_LIB_DIR is not set)
|
||||
endif
|
||||
|
||||
ifndef RCKTL_INSTALL_BIN_DIR
|
||||
$(error variable RCKTL_INSTALL_BIN_DIR is not set)
|
||||
endif
|
||||
|
||||
ifndef RCKTL_INSTALL_ICON_DIR
|
||||
$(error variable RCKTL_INSTALL_ICON_DIR is not set)
|
||||
endif
|
||||
|
||||
ifndef RCKTL_INSTALL_DESKTOPFILE_DIR
|
||||
$(error variable RCKTL_INSTALL_DESKTOPFILE_DIR is not set)
|
||||
endif
|
||||
|
||||
all: $(RCKTL_DIR)/$(PORTABLE_SCRIPT)
|
||||
|
||||
|
||||
clean:
|
||||
rm -f "$(RCKTL_DIR)/$(PORTABLE_SCRIPT)"
|
||||
|
||||
install:
|
||||
install -D "$(RUN_SCRIPT)" "$(DESTDIR)$(RCKTL_INSTALL_BIN_DIR)/$(RUN_SCRIPT)"
|
||||
|
||||
install -D "$(DESKTOP_FILE)" "$(DESTDIR)$(RCKTL_INSTALL_DESKTOPFILE_DIR)/$(DESKTOP_FILE)"
|
||||
|
||||
install -D "$(ICON_NAME)_16x16.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/16x16/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_22x22.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/22x22/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_24x24.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/24x24/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_32x32.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/32x32/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_36x36.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/36x36/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_48x48.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/48x48/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_48x48.png" "/usr/share/pixmaps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_64x64.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/64x64/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_72x72.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/72x72/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_96x96.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/96x96/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_128x128.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/128x128/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_192x192.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/192x192/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_256x256.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/256x256/apps/$(ICON_NAME).png"
|
||||
install -D "$(ICON_NAME)_512x512.png" "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/512x512/apps/$(ICON_NAME).png"
|
||||
|
||||
-update-icon-caches "$(RCKTL_INSTALL_ICON_DIR)"
|
||||
-gtk-update-icon-cache "$(RCKTL_INSTALL_ICON_DIR)"
|
||||
|
||||
uninstall:
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_BIN_DIR)/$(RUN_SCRIPT)"
|
||||
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_DESKTOPFILE_DIR)/$(DESKTOP_FILE)"
|
||||
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/16x16/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/22x22/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/24x24/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/32x32/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/36x36/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/48x48/apps/$(ICON_NAME).png"
|
||||
rm -f "/usr/share/pixmaps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/64x64/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/72x72/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/96x96/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/128x128/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/192x192/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/256x256/apps/$(ICON_NAME).png"
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_ICON_DIR)/512x512/apps/$(ICON_NAME).png"
|
||||
|
||||
-update-icon-caches "$(RCKTL_INSTALL_ICON_DIR)"
|
||||
-gtk-update-icon-cache "$(RCKTL_INSTALL_ICON_DIR)"
|
||||
|
||||
$(RCKTL_DIR)/$(PORTABLE_SCRIPT): $(PORTABLE_SCRIPT)
|
||||
@echo " CP $(notdir $@)"
|
||||
@cp "$(PORTABLE_SCRIPT)" "$(RCKTL_DIR)/$(PORTABLE_SCRIPT)"
|
||||
@chmod +x "$(RCKTL_DIR)/$(PORTABLE_SCRIPT)"
|
||||
|
|
@ -1,4 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
export LD_LIBRARY_PATH="/usr/lib/rapidlauncher":LD_LIBRARY_PATH
|
||||
exec /usr/lib/rapidlauncher/rapidlauncher "$@"
|
|
@ -1,9 +0,0 @@
|
|||
[Desktop Entry]
|
||||
Name=RapidLauncher
|
||||
GenericName=Application launcher
|
||||
Comment=Fast lightweight application launcher
|
||||
Exec=rapidlauncher
|
||||
Icon=rapidlauncher
|
||||
Terminal=false
|
||||
Type=Application
|
||||
Categories=Utility;
|
Before Width: | Height: | Size: 5.2 KiB |
Before Width: | Height: | Size: 767 B |
Before Width: | Height: | Size: 8.1 KiB |
Before Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 9.7 KiB |
Before Width: | Height: | Size: 1.5 KiB |
Before Width: | Height: | Size: 1.7 KiB |
Before Width: | Height: | Size: 2.1 KiB |
Before Width: | Height: | Size: 23 KiB |
Before Width: | Height: | Size: 2.8 KiB |
Before Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 3.9 KiB |
|
@ -1,6 +0,0 @@
|
|||
#!/bin/sh
|
||||
|
||||
cd "$(dirname $0)"
|
||||
export LD_LIBRARY_PATH="$PWD"
|
||||
export GI_TYPELIB_PATH="$PWD"
|
||||
./rapidlauncher
|
BIN
screenshot.jpg
Before Width: | Height: | Size: 165 KiB |
13
src/Makefile
|
@ -1,13 +0,0 @@
|
|||
BINARY := rapidlauncher
|
||||
|
||||
all:
|
||||
gcc `pkg-config --cflags gtk+-3.0` RapidLauncher.c `pkg-config --libs gtk+-3.0` -L../build/ -lappman `pkg-config --cflags --libs glib-2.0` -o ../build/$(BINARY) -O3
|
||||
|
||||
clean:
|
||||
rm ../build/$(BINARY)
|
||||
|
||||
install:
|
||||
install -D "$(RCKTL_DIR)/$(BINARY)" "$(DESTDIR)$(RCKTL_INSTALL_LIB_DIR)/$(BINARY)"
|
||||
|
||||
uninstall:
|
||||
rm -f "$(DESTDIR)$(RCKTL_INSTALL_LIB_DIR)/$(BINARY)"
|
|
@ -1,239 +0,0 @@
|
|||
#include <gtk/gtk.h>
|
||||
#include "../build/appman.h"
|
||||
|
||||
#define SPACE 40
|
||||
#define ICON_SIZE 80
|
||||
#define ICON_PADDING 10
|
||||
#define BUTTON_WIDTH 100
|
||||
#define BUTTON_HEIGHT 30
|
||||
|
||||
static gint screen_width;
|
||||
static gint screen_height;
|
||||
static AppmanApp** apps = NULL;
|
||||
static int apps_count = 0;
|
||||
|
||||
void set_widget_color(GtkWidget *widget, float red, float green, float blue, float opacity) {
|
||||
GdkRGBA bgcolor = {.0, .0, .1, 1.0}; //Default color
|
||||
if (red || green || blue || opacity) {
|
||||
bgcolor.red = red;
|
||||
bgcolor.green = green;
|
||||
bgcolor.blue = blue;
|
||||
bgcolor.alpha = opacity;
|
||||
}
|
||||
gchar *css;
|
||||
GtkCssProvider *provider;
|
||||
provider = gtk_css_provider_new ();
|
||||
css = g_strdup_printf ("* { background-color: %s; }", gdk_rgba_to_string (&bgcolor));
|
||||
gtk_css_provider_load_from_data (provider, css, -1, NULL);
|
||||
g_free (css);
|
||||
gtk_style_context_add_provider (gtk_widget_get_style_context (widget), GTK_STYLE_PROVIDER (provider), GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
|
||||
g_object_unref (provider);
|
||||
}
|
||||
|
||||
gboolean resize_image(GtkWidget *widget, int width, int height) {
|
||||
GdkPixbuf *pixbuf = gtk_image_get_pixbuf(GTK_IMAGE(widget));
|
||||
if (pixbuf == NULL)
|
||||
{
|
||||
g_printerr("Failed to resize image\n");
|
||||
return FALSE;
|
||||
}
|
||||
GdkPixbuf *scaled_pixbuf = gdk_pixbuf_scale_simple(pixbuf, width, height, GDK_INTERP_BILINEAR);
|
||||
gtk_image_set_from_pixbuf(GTK_IMAGE(widget), scaled_pixbuf);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
void resize_text(gchar* str, int limit) {
|
||||
if (strlen(str) > limit) {
|
||||
str[limit-2] = '.';
|
||||
str[limit-1] = '.';
|
||||
str[limit] = '\0';
|
||||
}
|
||||
}
|
||||
|
||||
/* Signal Handlers */
|
||||
|
||||
static gboolean on_icon_mouse_enter_callback (GtkWidget *widget, GdkEvent *event, gpointer data) {
|
||||
set_widget_color((GtkWidget*)widget, 0.1, 0.5, .8, 1.0); //sky-blue
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static gboolean on_icon_mouse_leave_callback (GtkWidget *widget, GdkEvent *event, gpointer data) {
|
||||
set_widget_color((GtkWidget*)widget, 0, 0, 0, 0); //set default color
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean on_icon_button_press_callback (GtkWidget *widget, GdkEventButton *event, gpointer data) {
|
||||
appman_app_start((AppmanApp*)data);
|
||||
gtk_main_quit ();
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static gboolean on_window_key_press_callback (GtkSearchEntry *searchentry, GdkEvent *event, gpointer data)
|
||||
{
|
||||
if (((GdkEventKey*)event)->keyval == GDK_KEY_Escape)
|
||||
gtk_main_quit ();
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean on_icon_key_press_callback (GtkWidget *widget, GdkEvent *event, gpointer data)
|
||||
{
|
||||
if (((GdkEventKey*)event)->keyval == GDK_KEY_Return) {
|
||||
appman_app_start((AppmanApp*)data);
|
||||
gtk_main_quit ();
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static gboolean on_search_entry_key_release_callback (GtkSearchEntry *searchentry, GdkEvent *event, gpointer data)
|
||||
{
|
||||
gint keyval = ((GdkEventKey*)event)->keyval;
|
||||
if (((keyval >= GDK_KEY_A) && (keyval <= GDK_KEY_Z)) || ((keyval >= GDK_KEY_0) && (keyval <= GDK_KEY_9)) || ((keyval >= GDK_KEY_a) && (keyval <= GDK_KEY_z)) || (keyval == GDK_KEY_BackSpace) || (keyval == GDK_KEY_Cancel)) {
|
||||
gint i, row;
|
||||
gint columns = screen_width/(SPACE+ICON_SIZE) - 2;
|
||||
/* I'm not using TRIE or binary search because in general there is a small number of installed application,
|
||||
* so the efficiency is good enought also with this simple code.
|
||||
*/
|
||||
const gchar *query = gtk_entry_get_text((GtkEntry*)searchentry);
|
||||
AppmanApp *app;
|
||||
for (i = 0; i < apps_count; i++) {
|
||||
row = i / columns;
|
||||
GtkWidget *child = gtk_grid_get_child_at((GtkGrid*)data, i - (row * columns), row);
|
||||
gchar *name = appman_app_get_name (apps[i]);
|
||||
if (!(g_str_has_prefix ( g_utf8_strdown ( name, strlen(name) ), g_utf8_strdown (query, strlen(query))))) {
|
||||
gtk_widget_hide (child);
|
||||
} else {
|
||||
gtk_widget_show (child);
|
||||
if (strlen(name) == strlen(query))
|
||||
gtk_widget_grab_focus (child);
|
||||
}
|
||||
}
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void add_application(GtkGrid *grid, AppmanApp *app, int i, int j) {
|
||||
GtkWidget *event_box = gtk_event_box_new ();
|
||||
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0);
|
||||
GtkWidget *image = gtk_image_new_from_file (appman_app_get_icon_path (app));
|
||||
resize_image(image, ICON_SIZE, ICON_SIZE);
|
||||
gtk_box_pack_start (GTK_BOX (box), image, FALSE, FALSE, ICON_PADDING);
|
||||
gchar *str = appman_app_get_name (app);
|
||||
resize_text(str, 15);
|
||||
GtkWidget *label = gtk_label_new (NULL);
|
||||
gtk_label_set_markup (GTK_LABEL (label), g_strconcat("<span color='#FFFFFF'>",str,"</span>", NULL));
|
||||
g_free(str);
|
||||
gtk_box_pack_start (GTK_BOX (box), label, FALSE, FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (event_box), box);
|
||||
gtk_widget_set_can_focus (event_box, TRUE);
|
||||
gtk_grid_attach(GTK_GRID(grid), event_box, j, i, 1, 1);
|
||||
g_signal_connect (G_OBJECT (event_box), "button-press-event", G_CALLBACK (on_icon_button_press_callback), (gpointer) app);
|
||||
g_signal_connect (G_OBJECT (event_box), "enter-notify-event", G_CALLBACK (on_icon_mouse_enter_callback), NULL);
|
||||
g_signal_connect (G_OBJECT (event_box), "leave-notify-event", G_CALLBACK (on_icon_mouse_leave_callback), NULL);
|
||||
g_signal_connect (G_OBJECT (event_box), "key-press-event", G_CALLBACK (on_icon_key_press_callback), (gpointer) app);
|
||||
g_signal_connect (G_OBJECT (event_box), "focus-in-event", G_CALLBACK (on_icon_mouse_enter_callback), NULL); //Same as mouse events
|
||||
g_signal_connect (G_OBJECT (event_box), "focus-out-event", G_CALLBACK (on_icon_mouse_leave_callback), NULL);
|
||||
}
|
||||
|
||||
void add_applications(GtkGrid *grid) {
|
||||
int columns = screen_width/(SPACE+ICON_SIZE) - 2;
|
||||
AppmanApplicationHandler *apphandl = appman_application_handler_new ();
|
||||
apps = appman_application_handler_get_apps (apphandl, &apps_count);
|
||||
int j = 0;
|
||||
int t = apps_count/columns;
|
||||
int i = 0;
|
||||
int x = 0;
|
||||
for (j = 0; j < columns; j++) gtk_grid_insert_column (grid, j);
|
||||
for (i=0; i < t; i++) {
|
||||
gtk_grid_insert_row (grid, i);
|
||||
for (j = 0; j < columns; j++) {
|
||||
add_application(grid, apps[x], i, j);
|
||||
x++;
|
||||
}
|
||||
}
|
||||
//reminder of division
|
||||
j = apps_count % columns;
|
||||
gtk_grid_insert_row (grid, i);
|
||||
for (x = 0; x < j; x++) {
|
||||
add_application(grid, apps[x+i*columns], i, x);
|
||||
}
|
||||
|
||||
g_object_unref (apphandl);
|
||||
}
|
||||
|
||||
|
||||
/** Maybe they aren't so useful
|
||||
void add_filter_buttons (GtkWidget *box, GtkWidget *grid) {
|
||||
GtkWidget *btn_utility = gtk_button_new_with_label ("Utility");
|
||||
gtk_widget_set_size_request (btn_utility, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||
g_signal_connect (G_OBJECT (btn_utility), "clicked", G_CALLBACK (on_button_clicked_callback), (gpointer) grid);
|
||||
GtkWidget *btn_audiovideo = gtk_button_new_with_label ("AudioVideo");
|
||||
gtk_widget_set_size_request (btn_audiovideo, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||
GtkWidget *btn_game = gtk_button_new_with_label ("Game");
|
||||
gtk_widget_set_size_request (btn_game, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||
GtkWidget *btn_network = gtk_button_new_with_label ("Network");
|
||||
gtk_widget_set_size_request (btn_network, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||
GtkWidget *btn_office = gtk_button_new_with_label ("Office");
|
||||
gtk_widget_set_size_request (btn_office, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||
GtkWidget *btn_development = gtk_button_new_with_label ("Development");
|
||||
gtk_widget_set_size_request (btn_development, BUTTON_WIDTH, BUTTON_HEIGHT);
|
||||
GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 20);
|
||||
gtk_widget_set_halign(hbox, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), btn_utility, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), btn_audiovideo, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), btn_game, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), btn_network, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), btn_office, FALSE, FALSE, 0);
|
||||
gtk_box_pack_start (GTK_BOX (hbox), btn_development, FALSE, FALSE, 0);
|
||||
gtk_widget_set_margin_top(hbox, 20);
|
||||
gtk_box_pack_start (GTK_BOX (box), hbox, FALSE, FALSE, 0);
|
||||
}
|
||||
*/
|
||||
|
||||
int main (int argc, char **argv) {
|
||||
GtkWidget *window;
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
|
||||
/* Get the size of the screen */
|
||||
GdkScreen *screen = gdk_screen_get_default ();
|
||||
screen_width = gdk_screen_get_width (screen);
|
||||
screen_height = gdk_screen_get_height (screen);
|
||||
GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 20);
|
||||
GtkWidget *scrolled_window = gtk_scrolled_window_new (NULL, NULL);
|
||||
gtk_scrolled_window_set_min_content_height ((GtkScrolledWindow*)scrolled_window, screen_height-80 );
|
||||
GtkWidget *search_entry = gtk_search_entry_new ();
|
||||
gtk_widget_set_margin_top(search_entry, 20);
|
||||
gtk_widget_set_margin_start(search_entry, screen_width-800);
|
||||
gtk_widget_set_margin_end(search_entry, screen_width-800);
|
||||
GtkWidget *grid = gtk_grid_new ();
|
||||
gtk_grid_set_row_spacing((GtkGrid*)grid, SPACE);
|
||||
gtk_grid_set_column_spacing((GtkGrid*)grid, SPACE);
|
||||
add_applications((GtkGrid*)grid);
|
||||
set_widget_color(window, 0, 0, 0, 0);
|
||||
gtk_window_set_decorated(GTK_WINDOW(window), FALSE);
|
||||
gtk_window_fullscreen (GTK_WINDOW(window));
|
||||
gtk_window_set_modal(GTK_WINDOW(window), TRUE);
|
||||
gtk_window_set_title(GTK_WINDOW(window), "RapidLauncher");
|
||||
|
||||
//add_filter_buttons (box, grid); DISABLED
|
||||
gtk_box_pack_start (GTK_BOX (box), search_entry, FALSE, FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER(scrolled_window), grid);
|
||||
gtk_widget_set_halign(grid, GTK_ALIGN_CENTER);
|
||||
gtk_box_pack_start (GTK_BOX (box), scrolled_window, FALSE, FALSE, 0);
|
||||
gtk_container_add (GTK_CONTAINER (window), box);
|
||||
|
||||
gtk_widget_set_events(window, GDK_POINTER_MOTION_MASK | GDK_BUTTON_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_FOCUS_CHANGE_MASK);
|
||||
|
||||
g_signal_connect (G_OBJECT (window), "key-press-event", G_CALLBACK (on_window_key_press_callback), NULL);
|
||||
g_signal_connect (G_OBJECT (search_entry), "key-release-event", G_CALLBACK (on_search_entry_key_release_callback), grid);
|
||||
|
||||
gtk_widget_grab_focus (search_entry);
|
||||
gtk_widget_show_all (window);
|
||||
|
||||
gtk_main ();
|
||||
|
||||
return 0;
|
||||
}
|