I did some modify to [email protected] applet to add rag and drop functionality:
I added this to class ApplicationButton extends GenericApplicationButton { …
handleDragOver (source, actor, x, y, time) {
//global.log("X=",x," Y=",y);
//let button=source;
//global.log(button.category);
this.actor.style_class = "menu-category-button-selected";
}
handleDragOut() {
global.log("YY");
this.actor.style_class = "menu-category-button";
}
acceptDrop (source, actor, x, y, time) { // Modifica TOMMASO
//global.log("Cat X=",x," Y=",y);
let button=source; //Bottone spostato
//global.log("CAT ",button.category," ",button.name," ",button.position);
//global.log("CAT act",this.category);
button.category=this.category;
let parent = this.actor.get_parent();
//global.log("parent=",parent.name); // applicationsBox
//parent.insert_child_below(button.actor,this.actor);
let parentParent = parent.get_parent();
//global.log("parentParent=",parentParent.name); // applicationsScrollBox
let parentParenParent = parentParent.get_parent();
//global.log("parentParenParent=",parentParenParent.name); // categoriesApplicationsBox.actor
let nn=parentParenParent.categoriesBox;
//global.log("parentParenParentParent=",nn.name); // CinnamonMenuApplet -- 1206
let actors =nn.get_children();
for (let i = 0; i < actors.length; i++){
let actor = actors[i];
//global.log(actor.idx," ",actor.menu_id," ",actor.name);
if (actor.menu_id==this.category){
this.applet._select_category2(actor.menu_id);
}
// actor.style_class = "menu-category-button-selected"; //Evidenza il pulsante passandoci sopra
//actor.remove_style_pseudo_class("hover")
//actor.style_class = "menu-category-button";
//actor.show();
}
//parentParenParentParent._CategoryButtons[3].activate();
}
I added this to class CategoryButton extends SimpleMenuItem { ...
` acceptDrop (source, actor, x, y, time) { // Modifica TOMMASO
global.log("Cat X=",x," Y=",y);
let button=source;
global.log("CAT ",button.category," ",button.name," ",button.index);
global.log("CAT act",this.label);
button.category=this.label.text;
}
handleDragOver (source, actor, x, y, time) {
this.activate();
}
I inserted this into _display function:
this.categoriesApplicationsBox.actor.categoriesBox=this.categoriesBox;
I added this function under _select_category:
_select_category2 (name = null) {
this.lastSelectedCategory = name;
this._displayButtons(name || 'app');
this.closeContextMenu(false);
this._scrollToButton(null);
}
Now I can drag an application button to other categories.
The point is that while I drag, I have some strange artifact on the left panel.
Morever I discovered how highlight buttons but I cannot disable highlights. As you can see I tried with “handleDragOut”, but no success.
handleDragOver (source, actor, x, y, time) {
global.log("X=",x," Y=",y);
let button=source;
global.log(button.category);
this.actor.style_class = "menu-category-button-selected";
}
handleDragOut() {
global.log("YY");
this.actor.style_class = "menu-category-button";
}
I had to discover how to do these things with “try and error” method because I cannot find good and exaustive documentation about Cinnamon Applets.
Where could I find Cinnamon Applets reference ?
I would like to save changes of the menu in some file, but at the moment I’ve no idea…
Thank you