Changing the Trashcan icon in the dock - objective-c

Is it possible to write a program for Mac OS X that monitors the trashcan and changes the icon dynamically when you fill the can?

Yes, it's possible. Candybar does it. I expect that rather than dynamically changing the icon, they just register a new 'empty' and 'full' icon with the Dock process.

Panic's Candybar lets you customize system icons (including the trash), so it must be possible.

The NSDockTile class allows you to make changes to your application's icon in the dock:
http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSDockTile_Class/Reference/Reference.html
The Trash is actually a hidden folder in the user's home folder called .Trash
I guess you could monitor whether or not it's empty by periodically finding the size of the folder. Or you could run ls using NSTask, and find out whether there are any files left in it.

Related

How to set custom icon for file-type in mac osx

I have a launcher application for some file-types in mac osx. I want to know is it possible to register custom Icon for file-types associated with my launcher application? and does anybody know exact behavior of OS, when does it show Icon and when does it show some empty icon?
Question 1:
It's easy. In finder, right click on the filename with the extension you're interested in.
Find the "Open with:" section,
Click on the blue part and navigate to your launcher app and select it.
Then click on "Change All..."
Write down, or remember what it used to be before changing it, in case you want to go back to the old behavior. It affects all files with that extension.
Question 2:
Check this link for information on filling in the images in your assets folder: App Icons
If you include an icon in your app, and do the above steps, the icon will show. If you don't include one, it won't.

How to hide the automator application icon when running

I create a automator application and set it to run at logon, and I check the "Hide" box, but it still shows up (the gear icon) in the status bar. How can I hide it?
I check the "Hide" box here:
but the gear icon is still shown (the worse part is that it never stops rotating!)
Is it possible to hide this icon, or let it stop rotating?
control-click on it, and choose Show Package Contents from the pop-up menu. Inside the Contents folder, open up Info.plist, and change LSUIElement from No to Yes (if using Property List Editor) — or change the line after the LSUIElement key line to (if using a text editor). Save Info.plist.
Now when the alarm triggers, the Automator plugin will run in the background, without a Dock icon or a menu bar, and the focus will remain on the application you’re using.
Three things to note:
You might have to move the plug-in out of the iCal folder and back in
for this to work. Tiger caches the LSUIElement info; moving the app
forces Tiger to renew the cache.
You probably do not want to do this with any iCal plugin that has
dialogs or requires user interaction! This works best for maintenance
actions, automated downloads, and that sort of thing.
Third, this will work with any Automator workflow that is saved as an
application, not just with iCal plugins.”
Then Clear your Cache

Register Double-Click on Desktop (but not on Icons !)

Here's a though question:
I need to find out when the user double-clicked the OS X desktop, but not icons on it.
Now, I have thought of the following solutions, though I am not sure if they are doable:
Using desktop icons position (not sure how to get them), and the size of the desktop icons, we could theoretically check once the user double-clicks on the desktop, if it is inside one of the icon areas. Contra: Might not be flawless as some icons might be transparent or not taking up the entire icon size.
Maybe there is a variable that tells us if a icon from the desktop has been clicked? Then we could just check if that variable has been activated when the user double-clicked the last time the desk.
I am certainly still open to other (better) solutions, but they need to be sandboxable for the Mac App Store.
This is probably not going to be appropriate for the Mac App Store, for a number of reasons.
First, how are you going to intercept clicks outside your window? There are a few different mechanisms for this (e.g., event taps), but none of them are allowed in sandboxed apps. And that's intentional, and for a good reason—you're not supposed to be interfering with other apps or with the OS.
On top of that, it's hard to imagine that whatever you're trying to do wouldn't count as non-standard UI/HIG stuff, which is another reason for rejection.
But, assuming none of that were a problem, and you could intercept clicks on the desktop, there's no documented way to get all the icons on the desktop, so you have to read the .DS_store file directly, which means relying on private implementation information, which is another thing you're not allowed to do.
Finally, you have to get access to that .DS_store file. Unless you're expecting the user to drag the (invisible) file or its parent directory to your app or select it in an NSOpenPanel or something, the only way to get such access from inside the sandbox is via a temporary exception entitlement. Which you can't use unless you can justify to the reviewer why you need it as a workaround for a bug or limitation in the OS. So, what's your justification going to be?

Hide application icon from dock, but keep icon in task switcher?

It's possible to show/hide the application's icon from both the Dock and the Task Switcher by setting the "Application is agent (UIElement)" property to YES/NO.
However, is it possible to have an application show in the Task Switcher (Cmd + Tab), but not appear in the Dock?
Thanks.
I'm reasonably certain that this is impossible, and that the dock and the app switcher are using the exact same list to decide what should appear in them.
The reason for my believing this is that there's actually a procedure for removing an app's icon from the Dock, while the target app is running, that has nothing to do with the LSUIElement key. (It consists, essentially, of renaming/moving the app bundle and then restarting the Dock.) Even doing that, though, the app doesn't appear in the switcher.
(You can find the full procedure on macosxhints.com, if you're interested.)

Dragging Files on the Dock Icon

I know how handle dragging of files on the dock icon, and it has been asked before.
However, I'm wondering, can I somehow get more control?
For example, can I make the dock icon reject files that are not in the user's folder and allow only files that are in the user's folder?
I'd rather do that instead of the app appearing as if it handles files outside the user's folder, and then within the app delegate afterwards reject the files by detecting the file paths. That doesn't seem good from a user's perspective.
I realized that my question is kind of meaningless, as Option-dropping files on the dock icons forces the operation to be allowed, in any case. So there is simply no getting around handling the thing after the drop operation has been allowed. Thus, ignore this question :)